スレッドを初期化する
マルチスレッド アプリケーションの構築 への移動
スレッド オブジェクトを初期化するには:
- デフォルトのスレッド優先度を割り当てます。
- スレッドが解放されるタイミングを指定します。
デフォルトの優先度を割り当てるには:
- 次の表に示された値から、スレッドにデフォルト優先度を割り当てます。タイム クリティカルなタスクの処理には高い優先度を使用し、それ以外のタスクの実行には低い優先度を使用します。
値 |
優先度 |
tpIdle |
スレッドは、システムがアイドル状態のときにのみ実行されます。tpIdle の優先度を持つスレッドを実行するために、Windows が他のスレッドに割り込むことはありません。 |
tpLowest |
スレッドの優先度は、通常より 2 ポイント低くなります。 |
tpLower |
スレッドの優先度は、通常より 1 ポイント低くなります。 |
tpNormal |
スレッドの優先度は、通常どおりです。 |
tpHigher |
スレッドの優先度は、通常より 1 ポイント高くなります。 |
tpHighest |
スレッドの優先度は、通常より 2 ポイント高くなります。 |
tpTimeCritical |
スレッドの優先度は、最も高くなります。 |
- 新しいコンストラクタを宣言に追加することにより、スレッド クラスの Create メソッド(Delphi の場合)またはデフォルト コンストラクタ(C++ の場合)をオーバーライドします。
- コンストラクタをコーディングします。次に示すのは、優先度が低いスレッドの例です。 constructor TMyThread.Create(CreateSuspended: Boolean); begin inherited Create(CreateSuspended); Priority := tpIdle; end; TMyThread::TMyThread( bool CreateSuspended ) : TThread( CreateSuspended ) { Priority = tpIdle; }
- 実行終了時にスレッドを自動的に解放するかどうかを指定します。
警告: CPU に負担のかかる処理のスレッド優先度を高くすると、アプリケーション内の他のスレッドを実行できなくなる可能性があります。時間の大半を外部イベントの待機に費やすスレッドのみ、優先度を高くします。
スレッドが解放されるタイミングを指定するには:
- 他のスレッドとの調整が必要ない場合は、スレッドの FreeOnTerminate プロパティを true に設定します。
- 別のスレッドとの調整が必要な場合は、スレッドの FreeOnTerminate プロパティを false に設定したうえで、第 1 のスレッドを第 2 のスレッドから明示的に解放します。