System.Classes.TThread.FreeOnTerminate
Delphi
property FreeOnTerminate: Boolean read FFreeOnTerminate write SetFreeOnTerminate;
C++
__property bool FreeOnTerminate = {read=FFreeOnTerminate, write=SetFreeOnTerminate, nodefault};
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
property | public | System.Classes.pas System.Classes.hpp |
System.Classes | TThread |
説明
スレッド終了時に、そのスレッド オブジェクトが自動的に破壊されるかどうかを決定します。
スレッドの実行を終了した後に、それらを明示的に破壊したくない場合には、FreeOnTerminate に True を設定します。FreeOnTerminate が False の場合、スレッド オブジェクトはアプリケーション コード内で、明示的に破壊されなければなりません。
警告:
FreeOnTerminate が True の場合、Execute メソッドが実行され、アプリケーションがコードの次の行を実行する前に、スレッドを解放する場合があります。このため、FreeOnTerminate が True の場合には、そのスレッドが保留状態でない限り、スレッド オブジェクトのメソッドは呼び出すべきではありません。
FreeOnTerminate は、タスクを単純に実行し、その後自然に終了するままに任せるスレッドに使用するのがいいでしょう。そのスレッドと通信したい、もしくは、終了するタイミングを指定することも含め、そのスレッドとやりとりを行いたい場合、FreeOnTerminate は使用するべきではありません。
TThread に対して Free を呼び出すと、Terminated := True が設定され、そのスレッドが終了するまでブロックします。FreeAndNil() を使用すると、変数に nil を設定することができます。Free が返ってきたら、スレッドはなくなり、TThread インスタンスはそれ以降、有効ではなくなります。Terminate はいつ、何度呼び出しても構いません(プロパティを Terminated := True と設定するだけです)。Terminated がすでに True の場合、Free の呼び出しは単純にそれを再度呼び出すのみで、それ以前の文に何らかの障害を与えるわけではありません。実際のスレッド自身が終了するまで、呼び出し側をブロックします。
関連項目