AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Mehrere Programminstanzen per Thread starten
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere Programminstanzen per Thread starten

Ein Thema von Aike · begonnen am 13. Nov 2004 · letzter Beitrag vom 16. Nov 2004
Antwort Antwort
Seite 1 von 2  1 2      
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#1

Mehrere Programminstanzen per Thread starten

  Alt 13. Nov 2004, 18:57
Hallo Leute,

ich habe folgendes Problem:
Mein Programm (Spiel-Client) will nicht, dass die exe-Datei mehrfach gestartet wird. Aber man kann öfter mal mehrere Clients brauchen, weswegen es nicht schlecht wäre, wenn man vier, fünf oder mehr Clients öffnen könnte.

Ich habe mir nun überlegt, dass das mit Threads funktionieren könnte. Ein Freund von mir hat es in Java fertig gebracht, das Programm bis zu 17 mal zu starten (danach RAM-Überlastung 8)).

In Delphi habe ich es so programmiert...

Dies ist der Aufruf in der BasisKlasse:
Delphi-Quellcode:
var Prozesse: array of Thread;
    Anzahl: integer;
    i,x:integer;
begin
  Anzahl:=StrToInt(edAnzahl.Text);

  if Anzahl < 2 then
    Anzahl:=2;

  SetLength(Prozesse,Anzahl);

  for i:=0 to Anzahl-1 do
  begin
    Prozesse[i]:=Thread.Create(true);
    setPfad(path);
    Prozesse[i].Priority:=tpHighest;
    Prozesse[i].Resume;

    if i=Anzahl-1 then
    begin
      for x:=0 to Anzahl-1 do
      begin
        Prozesse[i].Terminate;
      end;
    end;
  end;
Und so sieht der Thread aus:
Delphi-Quellcode:
constructor Thread.Create(CreateSuspended:boolean);
begin
  inherited Create(CreateSuspended);
  Priority:=tpHighest;
  FreeOnTerminate:=True;
end;

procedure Thread.Execute;
begin
  ChDir(path);
  ShellExecute(handle,'open','Client.exe',NIL,NIL,SW_SHOWNORMAL);
end;
Komischerweise, und das kenne ich von einem anderen Tool, das das selbe bewirken soll, startet das Programm manchmal zwei Clienten, manchmal sieben oder auch nur einen.

Habt ihr eine Ahnung, wie ich das optimieren könnte, damit der Start schneller abläuft oder so?
Achim
  Mit Zitat antworten Zitat
Minz

Registriert seit: 19. Dez 2002
476 Beiträge
 
#2

Re: Mehrere Programminstanzen per Thread starten

  Alt 13. Nov 2004, 19:56
Also ich habe das Gefühl, dass du da grundsätzlich einen falschen Ansatz verfolgst. Wenn du Probleme hast, dein Programm mehrfach zu öffnen, liegt das Problem eher weniger bei Thread ja oder nein.

Eigentlich habe ich keine Probleme jedes meiner Programme sooft zu öffnen wie ich will.

Hast du also extra Code eingebaut, der das Mehrfach-Öffnen verhindert?

Zusätzlich kann es Probleme in der Ausführung deines Codes geben.

Du erstellst x Threads. Wann deren Ausführung ist überlässt du deinem System. Tatsache ist das deine Threads parallel zu deiner aufrufenden Anwendung ablaufen. Deine Anwendung terminiert aber deine zuvor erstellten Threads. Jenachdem wie dein System ausgelastet ist, löscht es y Threads bevor sie überhaupt zur Ausführung kommen.

Aber wie gesagt: Threads zu verwenden ist nicht die Lösung deines Problems...
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#3

Re: Mehrere Programminstanzen per Thread starten

  Alt 13. Nov 2004, 20:06
Zitat von Minz:
Eigentlich habe ich keine Probleme jedes meiner Programme sooft zu öffnen wie ich will.
Aber das Programm möchte nicht, dass es mehrfach geöffnet wird. Du kannst dich gerne salbst daran versuchen. Ich habe es kurz auf meinen Server hochgeladen (t4c.zip, 640kb).

Wie gesagt, wenn du eine bessere Lösung findest, bin ich dir echt dankbar
Achim
  Mit Zitat antworten Zitat
Minz

Registriert seit: 19. Dez 2002
476 Beiträge
 
#4

Re: Mehrere Programminstanzen per Thread starten

  Alt 13. Nov 2004, 20:09
Ich glaube es dir ja...

also ist es wohl nicht dein Programm ok...

Mit einem Thread öffnet er es also abundzu mehr als einmal ?

Dann liegt die Lösung in meinem 1. Beitrag...
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#5

Re: Mehrere Programminstanzen per Thread starten

  Alt 13. Nov 2004, 20:18
Wie man in meinem Ansatz erkennen kann, hab ich keine/kaum Ahnung von Threads. Was kann ich denn ändern?
Achim
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: Mehrere Programminstanzen per Thread starten

  Alt 13. Nov 2004, 20:24
In der OH ist folgendes zu lesen:
Terminate setzt die Eigenschaft Terminated des Thread auf true und signalisiert, dass der Thread so bald wie möglich beendet werden sollte.

Die Methode Execute eines Threads sowie alle von Execute aufgerufenen Methoden sollten die Eigenschaft Terminated regelmäßig abfragen und die Ausführung gegebenenfalls beenden.

Im Gegensatz zur Windows-API-Funktion TerminateThread, die den Thread sofort abbricht, fordert die Methode Terminate nur an, dass der Thread beendet wird. So kann der Thread vor Beendigung noch sämtliche Bereingungen durchführen.


TThread.Terminate; Bewirkt in diesem Fall also imho nichts.
  Mit Zitat antworten Zitat
Minz

Registriert seit: 19. Dez 2002
476 Beiträge
 
#7

Re: Mehrere Programminstanzen per Thread starten

  Alt 13. Nov 2004, 20:31
was passiert wenn du einfach das Programm in einer Schleife öffnest?
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#8

Re: Mehrere Programminstanzen per Thread starten

  Alt 13. Nov 2004, 20:40
Schon probiert; mit einem bisschen Glück öffnen sich zwei oder drei Fenster
Und das mit 20 Aufrufen.
Achim
  Mit Zitat antworten Zitat
Minz

Registriert seit: 19. Dez 2002
476 Beiträge
 
#9

Re: Mehrere Programminstanzen per Thread starten

  Alt 13. Nov 2004, 20:43
also ganz ähnlich wie wenn du Threads verwendest...

wobei ich wieder beim Ausgangspunkt bin...Threads ist nicht die Lösung.

Verwendet die Anwendung viele externe Dateien?

Evtl. hilft ein Umbenennen der Exe bevor du sie öffnest.

Immerhin probierst du ein Programm mehrfach zu öffnen, das anscheinend code enthält, genau dieses zu verhindern.
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#10

Re: Mehrere Programminstanzen per Thread starten

  Alt 13. Nov 2004, 20:48
Na ja, es gehört zu einem Spiel.
Es werden die Serverliste (txt-Datei) und die Sprachdatei geladen. Viel mehr dürfte das nicht sein.

Ich werde es kurz mit "Rename" probieren.

Maximal drei Aufrufe trotz neunfachen Aufrufes
Achim
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz