System.Classes.TThread.FreeOnTerminate
Delphi
property FreeOnTerminate: Boolean read FFreeOnTerminate write SetFreeOnTerminate;
C++
__property bool FreeOnTerminate = {read=FFreeOnTerminate, write=SetFreeOnTerminate, nodefault};
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
property | public | System.Classes.pas System.Classes.hpp |
System.Classes | TThread |
Description
Détermine si l'objet thread est automatiquement détruit lorsque le thread s'achève.
Affectez la valeur true à FreeOnTerminate si vous ne voulez pas détruire explicitement des threads après qu'ils ont achevé leur exécution. Quand FreeOnTerminate a la valeur false, l'objet thread doit être explicitement détruit dans le code de l'application.
Avertissement : Quand FreeOnTerminate a la valeur true, la méthode Execute doit exécuter puis libérer le thread avant que votre application puisse exécuter la ligne de code suivante. Donc, vous ne devez appeler aucune méthode de l'objet thread quand FreeOnTerminate a la valeur true sauf si vous créez le thread dans un état suspendu.
Le mieux est de laisser FreeOnTerminate pour les threads qui effectuent une tâche tout simplement, puis terminent naturellement. Dans l'éventualité où vous voudriez communiquer avec les threads ou interagir avec eux de toute autre manière, y compris leur dire quand s'achever, FreeOnTerminate ne doit jamais être utilisée.
Appeler Free sur un TThread définit Terminated := True puis le bloque jusqu'à ce que le thread s'achève. Vous pouvez utiliser FreeAndNil() au cas où vous voulez définir la variable sur nil. Lorsque Free renvoie, le thread est terminé et l'instance de TThread n'est plus valide. Vous pouvez appeler Terminate à tout moment et à plusieurs fois (elle ne fait que définir la propriété, Terminated := True). Si Terminated est déjà définie sur True, appeler Free l'appelle simplement de nouveau, ce qui n'invalide pas la proposition précédente. Elle bloque l'appelant jusqu'à ce que le thread lui-même s'achève.