System.Classes.TThread.FreeOnTerminate
Delphi
property FreeOnTerminate: Boolean read FFreeOnTerminate write SetFreeOnTerminate;
C++
__property bool FreeOnTerminate = {read=FFreeOnTerminate, write=SetFreeOnTerminate, nodefault};
Properties
Type | Visibility | Source | Unit | Parent |
---|---|---|---|---|
property | public | System.Classes.pas System.Classes.hpp |
System.Classes | TThread |
Description
Determines whether the thread object is automatically destroyed when the thread terminates.
Set FreeOnTerminate to true if you don't want to explicitly destroy threads after they finish executing. When FreeOnTerminate is false, the thread object must be explicitly destroyed in application code.
Warning: When FreeOnTerminate is true, the Execute method may run and then free the thread before your application can execute the next line of code. Thus, you should not call any methods of the thread object when FreeOnTerminate is true unless you create the thread in a suspended state.
FreeOnTerminate is best left for threads that simply perform a task and then naturally terminate. If you want to communicate with the thread or otherwise interact with it, including telling it when to terminate, FreeOnTerminate should never be used.
Calling Free on a TThread will set Terminated := True and then block until the thread terminates. You can use FreeAndNil() in the case where you want the variable set to nil. When Free returns, the thread is dead, gone, and the TThread instance is no longer valid. You can call Terminate at any time and any number of times (it only sets the property, Terminated := True). If Terminated is already True, calling Free will simply call it again, which doesn’t violate the previous sentence. It will block the caller until the actual thread itself terminates.
See Also