WaitForMultipleObjects passt hier nicht so ganz, da der Aufruf den Hauptthread und damit das Forumlar blockiert. Wie Uwe in #2 schon erwähnt hat, würde ich das auch mit dem OnTerminate Ereignis umsetzen.
Delphi-Quellcode:
procedure ButtonStartClick;
begin
StartThreads;
end;
procedure StartThreads;
begin
if ActiveThreads <> 0
then
Exit;
// falls noch Threads laufen, keine neuen starten
ActiveThreads := 4;
// Anzahl laufender Threads setzen
for i := 1
to ActiveThreads
do
TMyThread.Create.OnTerminate := OnThreadTerminate;
// Threads starten und Event setzen
end;
procedure OnThreadTerminate;
begin
Dec(ActiveThreads);
// Anzahl laufender Threads anpassen
if ActiveThreads = 0
then // falls das der letzte von den 4 Threads war...
StartThreads;
// ...nächsten 4 Threads starten
end;
Wenn du dann noch FreeOnTerminate aller Threads auf true setzt, brauchst du dich auch nicht um die Freigabe der Threads zu kümmern.