スレッド順序付けサービス

スレッド順序付けサービスは、1 つ以上のクライアント スレッドの実行を制御します。 これにより、各クライアント スレッドは、指定した期間中に相対的な順序で 1 回実行されます。

Windows Server 2003 および Windows XP: スレッド注文サービスは、Windows Vista および Windows Server 2008 以降で使用できます。

スレッド順序付けサービスは既定ではオフであり、ユーザーが開始する必要があります。 スレッド順序付けサービスの実行中は、システムがアイドル状態であっても、新しい要求があるかどうかをチェックするために 5 秒ごとにアクティブ化されます。 これにより、システムが 5 秒を超えてスリープ状態になり、システムの電力消費量が増えるのを防ぐことができます。 エネルギー効率がアプリケーションにとって重要な場合は、スレッド順序付けサービスを使用せず、代わりにシステム スケジューラがスレッドの実行を管理できるようにすることをお勧めします。

各クライアント スレッドは、 スレッド順序付けグループに属します。 親スレッド、AvRtCreateThreadOrderingGroup 関数を呼び出して、1 つ以上のスレッド順序付けグループを作成します。 親スレッドは、この関数を使用して、スレッド順序付けグループの期間とタイムアウト間隔を指定します。

追加のクライアント スレッドは AvRtJoinThreadOrderingGroup 関数を 呼び出して、既存のスレッド順序付けグループに参加します。 これらのスレッドは、実行順序で親スレッドの先行スレッドか後続スレッドかを示します。 各クライアント スレッドは、各期間に一定量の処理を完了する必要があります。 グループ内のすべてのスレッドは、期間内にタイムアウト間隔を加えて実行を完了する必要があります。

スレッド順序付けグループのスレッドは、 AvRtWaitOnThreadOrderingGroup 関数によって制御されるループ内で処理コードを囲みます。 最初に、先行スレッドはグループに参加した順序で一度に 1 つずつ実行され、親スレッドと後続スレッドは AvRtWaitOnThreadOrderingGroup への呼び出しでブロックされます。 各先行スレッドの処理が完了すると、実行の制御は処理ループの先頭に戻り、スレッドは AvRtWaitOnThreadOrderingGroup を再度呼び出して、次のターンまでブロックします。 すべての先行スレッドがこの関数を呼び出した後、スレッド順序サービスは親スレッドをスケジュールできます。 最後に、親スレッドがその処理を終了し、 AvRtWaitOnThreadOrderingGroup を 再度呼び出すと、スレッド順序サービスは、グループに参加した順序で後続スレッドを一度に 1 つずつスケジュールできます。 期間が終了する前にすべてのスレッドが実行を完了した場合、すべてのスレッドは、期間の残りの部分が経過するまで待機してから、いずれかが再度実行されます。

クライアントはスレッド順序付けグループの一部として実行する必要がなくなった場合、 AvRtLeaveThreadOrderingGroup 関数を 呼び出してグループから自身を削除します。 親スレッドは、スレッド順序付けグループからそれ自体を削除しないでください。 期間とタイムアウト間隔が経過する前にスレッドの実行が完了しない場合は、グループから削除されます。

親スレッドは AvRtDeleteThreadOrderingGroup 関数を 呼び出して、スレッド順序付けグループを削除します。 また、期間とタイムアウト間隔が経過する前に親スレッドが実行を完了しなかった場合、スレッド順序付けグループも破棄されます。 スレッド順序付けグループが破棄されると、そのグループのスレッドから AvRtWaitOnThreadOrderingGroup を 呼び出すと、失敗またはタイムアウトします。