Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#16

AW: Hauptthread splitten und wieder zusammenführen

  Alt 2. Jul 2010, 11:56
Mit WaitFor wartet man auf das Ende ... es gibt aber noch andere Möglichkeiten, um rauszubekommen, ob ein Thread schon fertig ist.
(z.B. mit Christians Events)

Wie startets du eigentlich die vielen Threads?

Eventuell kann man da einiges Zusammenfassen und mit in die Klasse einbauen, damit du es überall einfach aufrufen kannst.

Delphi-Quellcode:
X := TMyThread.Create;
Y := TMyThread.Create;
Z := TMyThread.Create;
repeat
  Sleep(10);
  Application.ProcessMessages;
until X.istFertig and Y.istFertig and Z.istFertig;
X.Free;
Y.Free;
Z.Free;
//weiter gehts...
Wenn das Starten einheitlich ist, dann läßt sich alles in eine Start-Funktion des TMyThread verlagen.



Delphi-Quellcode:
class procedure TMyThread.Warte(MyThreads: array of TMyThread);
var b: Boolean;
  i: Integer;
begin
  repeat
    Sleep(10);
    Application.ProcessMessages;
    B := True;
    for i := High(MyThreads) downto 0 do
      if not MyThreads[i].istFertig then
      begin
        B := False;
        Break;
      end;
  until B;
  for i := High(MyThreads) downto 0 do
    MyThreads[i].Free;
end;

SetLength(X, 3);
X[0] := TMyThread.Create;
X[1] := TMyThread.Create;
X[2] := TMyThread.Create;
TMyThread.Warte(X);
Delphi-Quellcode:
class procedure TMyThread.Starte(Parameter...);
var MyThreads: array of TMyThread;
  b: Boolean;
  i: Integer;
begin
  SetLength(MyThreads, 3);
  for i := 0 to High(MyThreads) do
    MyThreads[i] := TMyThread.Create(Parameter...);
  repeat
    Sleep(10);
    Application.ProcessMessages;
    B := True;
    for i := High(MyThreads) downto 0 do
      if not MyThreads[i].istFertig then
      begin
        B := False;
        Break;
      end;
  until B;
  for i := High(MyThreads) downto 0 do
    MyThreads[i].Free;
end;

TMyThread.Starte(Parameter...);
$2B or not $2B

Geändert von himitsu ( 2. Jul 2010 um 12:00 Uhr)
  Mit Zitat antworten Zitat