![]() |
Probleme mit Thread.Terminate verhindern
Hi!
Kann man sich bei einem Thread auf FreeOnTerminate := True verlassen (z.B. auch wenn bei TMyThread.destructor Destroy; override; eine Exception auftritt)? Gehen wir in diesem Beispiel davon aus, dass der Thread NICHT auf TMeineKomponente zugreifen muss. Nehmen wir mal an, der Thread schafft noch was, die dazugehörige TMeineKomponente (der Owner/Erzeuger von dem Thread) wird jetzt freigegeben. Was ist besser: Thread mit FreeOnTerminate:
Delphi-Quellcode:
oder ohne FreeOnTerminate:
destructor TMeineKomponente.Destroy;
begin try ReloadThread.Terminate; // andere Objekte freigeben finally inherited Destroy; end; end;
Delphi-Quellcode:
destructor TMeineKomponente.Destroy;
begin try ReloadThread.Terminate; // andere Objekte freigeben FreeAndNil(ReloadThread); // Was, wenn der Thread noch nicht fertig gelaufen ist? finally inherited Destroy; end; end; |
Re: Probleme mit Thread.Terminate verhindern
Wenn du die Methode 'Terminate' aufrufst, wird eigentlich nur die Eigenschaft 'Terminated' auf True gesetzt. Der Thread selbst bestimmt, wann er fertig ist. Du kannst aber auf den Thread per 'WaitFor' warten, so etwa:
Delphi-Quellcode:
MyThread.Terminate;
MyThread.WaitFor; MyThread.Free; |
Re: Probleme mit Thread.Terminate verhindern
Ah, WaitFor kannte ich noch garnicht. Das beantwortet die Frage, vielen Dank!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz