Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Probleme mit Thread.Terminate verhindern (https://www.delphipraxis.net/127804-probleme-mit-thread-terminate-verhindern.html)

berens 19. Jan 2009 12:21


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:
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;

alzaimar 19. Jan 2009 18:46

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;

berens 19. Jan 2009 18:48

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 16:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz