PRTL_UMS_SCHEDULER_ENTRY_POINT
コールバックシグネチャ
void PRTL_UMS_SCHEDULER_ENTRY_POINT(
RTL_UMS_SCHEDULER_REASON Reason,
UINT_PTR ActivationPayload,
void* SchedulerParam
);パラメーター
| フィールド | 型 | 説明 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Reason | RTL_UMS_SCHEDULER_REASON | スケジューラーエントリポイントが呼び出された理由。このパラメーターには、次のいずれかの値を指定できます。
| ||||||||
| ActivationPayload | UINT_PTR | Reason パラメーターが UmsSchedulerStartup の場合、このパラメーターは NULL です。 Reason パラメーターが UmsSchedulerThreadBlocked の場合、このパラメーターのビット 0 は、UMS ワーカースレッドがブロックされたときに処理されていた動作の種類を示します。
Reason パラメーターが UmsSchedulerThreadYield の場合、このパラメーターは、制御を譲った UMS ワーカースレッドの UMS スレッドコンテキストへのポインターです。 | ||||||||
| SchedulerParam | void* | Reason パラメーターが UmsSchedulerStartup の場合、このパラメーターは、エントリポイントの呼び出しの契機となった EnterUmsSchedulingMode 関数に渡された UMS_SCHEDULER_STARTUP_INFO 構造体の SchedulerParam メンバーです。 Reason パラメーターが UmsSchedulerThreadYield の場合、このパラメーターは、エントリポイントの呼び出しの契機となった UmsThreadYield 関数に渡された SchedulerParam パラメーターです。 Reason パラメーターが UmsSchedulerThreadBlocked の場合、このパラメーターは NULL です。 |
公式ドキュメント
UMS 完了リストに関連付けられた、アプリケーション定義のユーザーモードスケジューリング (UMS) スケジューラーエントリポイント関数です。
PUMS_SCHEDULER_ENTRY_POINT 型は、この関数へのポインターを定義します。UmsSchedulerProc は、アプリケーション定義の関数名のプレースホルダーです。
解説(Remarks)
UmsSchedulerProc 関数ポインター型は、WinBase.h で PUMS_SCHEDULER_ENTRY_POINT として定義されています。基になる関数型は、WinNT.h で RTL_UMS_SCHEDULER_ENTRY_POINT として定義されています。
各 UMS スケジューラースレッドには、そのスレッドが EnterUmsSchedulingMode 関数を呼び出すときに指定される UmsSchedulerProc エントリポイント関数が関連付けられます。システムは、スケジューラースレッドが UMS 用に変換されたときに、UmsSchedulerStartup の理由でスケジューラーエントリポイント関数を呼び出します。
その後、スケジューラースレッド上で実行されている UMS ワーカースレッドが制御を譲るかブロックされると、システムは、そのワーカースレッドの UMS スレッドコンテキストへのポインターを指定して、スケジューラースレッドのエントリポイント関数を呼び出します。
次に実行する UMS ワーカースレッドの選択は、アプリケーションのスケジューラーが担当します。スケジューラーは、プロセッサアフィニティやスレッドの優先度など、UMS スレッドの実行に影響するすべてのポリシーを実装します。たとえば、I/O 処理が多いスレッドを優先するスケジューラーもあれば、先着順でスレッドを実行するスケジューラーもあります。このロジックは、スケジューラーエントリポイント関数の中に実装することも、アプリケーションの別の場所に実装することもできます。
ブロックされていた UMS ワーカースレッドのブロックが解除されると、システムは、そのスレッドを関連付けられた完了リストにキューイングし、完了リストのイベントをシグナル状態にします。完了リストから UMS ワーカースレッドを取得するには、DequeueUmsCompletionListItems 関数を使用します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)