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:
destructor TMeineKomponente.Destroy;
begin
try
ReloadThread.Terminate;
// andere Objekte freigeben
finally
inherited Destroy;
end;
end;
oder ohne FreeOnTerminate:
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;