Thema: Delphi Schlafende Threads

Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

AW: Schlafende Threads

  Alt 11. Mai 2012, 16:22
Weil Terminate wird von TThread selber ja nie aufgerufen, sondern nur von außen.
Leider doch:
Delphi-Quellcode:
destructor TThread.Destroy;
begin
  if not FFinished and not Suspended then
  begin
    Terminate; // <===
    WaitFor;
  end;
  if FHandle <> 0 then CloseHandle(FHandle);
  inherited Destroy;
  RemoveThread;
end;
Der Aufruf in DoTerminate ist sicher falsch, weil zu spät im Ablauf.
Aber da Terminate nicht virtuell ist, kann man sich nicht drauf verlassen dass die Methode aufgerufen wird.
Delphi-Quellcode:
var
  test : TThread;
begin
  test := TMyThread.Create(False);
  test.free; // Thread bleibt "hängen"
Ich habe jetzt die Vorschläge umgesetzt, den Destruktor angepasst und den Timeout auf 20s gesetzt.
Andreas
  Mit Zitat antworten Zitat