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...);