Win32 API 日本語リファレンス
ホーム › System.Threading › PRTL_UMS_SCHEDULER_ENTRY_POINT

PRTL_UMS_SCHEDULER_ENTRY_POINT

コールバック

シグネチャ

void PRTL_UMS_SCHEDULER_ENTRY_POINT(
    RTL_UMS_SCHEDULER_REASON Reason,
    UINT_PTR ActivationPayload,
    void* SchedulerParam
);

パラメーター

フィールド型説明
ReasonRTL_UMS_SCHEDULER_REASON

スケジューラーエントリポイントが呼び出された理由。このパラメーターには、次のいずれかの値を指定できます。

値 意味
UmsSchedulerStartup
0
UMS スケジューラースレッドが作成されました。EnterUmsSchedulingMode が呼び出されるたびに、この理由でエントリポイントが 1 回呼び出されます。
UmsSchedulerThreadBlocked
1
UMS ワーカースレッドがブロックされました。
UmsSchedulerThreadYield
2
実行中の UMS ワーカースレッドが、UmsThreadYield 関数を呼び出して制御を譲りました。
ActivationPayloadUINT_PTR

Reason パラメーターが UmsSchedulerStartup の場合、このパラメーターは NULL です。

Reason パラメーターが UmsSchedulerThreadBlocked の場合、このパラメーターのビット 0 は、UMS ワーカースレッドがブロックされたときに処理されていた動作の種類を示します。

値 意味
0
スレッドは、トラップ (ハードページフォールトなど) または割り込み (非同期プロシージャ呼び出しなど) でブロックされました。
1
スレッドはシステムコールでブロックされました。

Reason パラメーターが UmsSchedulerThreadYield の場合、このパラメーターは、制御を譲った UMS ワーカースレッドの UMS スレッドコンテキストへのポインターです。

SchedulerParamvoid*

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 の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)