Mit anderen Worten:
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject)
begin
MyThread.Terminate;
MyThread.WaitFor;
end;
Beinhaltet der Thread ein Sleep(1000); wartet dein Thread eine Sekunde. Gnadenlos und völlig egal, was um ihn herum für ein Zampano abgeht. Der Aufruf von Terminate in obigem Beispiel würde also eine Sekunde blockieren, weil der Thread nicht eher reagieren kann. Der Benutzer wiederum denkt: "Mal wieder abgestürzt" und läßt sich zu Chaos-Handlungen hinreißen.
Besser wäre
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject)
begin
MyThread.Terminate;
MyThread.SetEvent(MyThreadEvent);
MyThread.WaitFor;
end;
Der Thread wartet nun auf den Event mit einem Timeout von einer Sekunde. Durch diesen Winkelzug hast du dein Sekunden-Sleep, bekommst den Thread aber sofort terminiert.