Einzelnen Beitrag anzeigen

fealXX

Registriert seit: 16. Dez 2007
10 Beiträge
 
#3

AW: WorkerThreadPool - "Freeze" beim beenden des Programms

  Alt 11. Apr 2013, 09:02
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;

Geändert von fealXX (11. Apr 2013 um 10:17 Uhr)
  Mit Zitat antworten Zitat