Einzelnen Beitrag anzeigen

OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#18

AW: TThread Suspend und Resume

  Alt 15. Sep 2016, 12:51
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.
  Mit Zitat antworten Zitat