Danke für die Antwort!
Ich dachte an etwas in der Richtung:
Delphi-Quellcode:
repeat
WaitHandle := WaitForSingleObject(fThreadPool[i].Handle, 1000);
Application.ProcessMessages;
until application.terminated or (WaitHandle <> WAIT_TIMEOUT);
Kann das Funktionieren? Wenn der Thread durchgelaufen ist, sollte das
fThreadPool[i].Free
nichtmehr lange dauern, oder seh ich das falsch?
Das ich die Anzeige selber basteln muss ist mir schon klar, das ist auch kein Problem wenn ich verhindert kriege das die App einfriert - wenn möglich halt ohne Thread, während des verändern der PoolSize will ich eh keine Usereingaben verarbeiten.
Gruß
Edit: Konnte das jetzt so Lösen, gibts etwas das dagegen spricht?
Delphi-Quellcode:
// Threads beenden (z.B. Beendigung anfordern)
For i := iCurrentPoolSize - 1 Downto Value Do
begin
fThreadPool[i].Terminate;
if (fThreadPool[i].fCurrentJob <> nil) then
begin
repeat
WaitHandle := WaitForSingleObject(fThreadPool[i].Handle, 1000);
MainApp.ProcessMessages;
until (MainApp.Terminated) or (WaitHandle <> WAIT_TIMEOUT) or
(fThreadPool[i].fCurrentJob = nil);
end;
end;