RTL_UMS_SCHEDULER_ENTRY_POINT コールバック関数 (winnt.h)

UMS 完了リストに関連付けられているアプリケーション定義ユーザー モード スケジューリング (UMS) スケジューラ エントリ ポイント関数。

PUMS_SCHEDULER_ENTRY_POINT型は、この関数へのポインターを定義します。 UmsSchedulerProc は、アプリケーション定義関数名のプレースホルダーです。

構文

RTL_UMS_SCHEDULER_ENTRY_POINT RtlUmsSchedulerEntryPoint;

void RtlUmsSchedulerEntryPoint(
  [in] RTL_UMS_SCHEDULER_REASON Reason,
  [in] ULONG_PTR ActivationPayload,
  [in] PVOID SchedulerParam
)
{...}

パラメーター

[in] Reason

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

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

[in] ActivationPayload

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

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

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

Reason パラメーターが UmsSchedulerThreadYield の場合、このパラメーターは、生成された UMS ワーカー スレッドの UMS スレッド コンテキストへのポインターです。

[in] SchedulerParam

Reason パラメーターが UmsSchedulerStartup の場合、このパラメーターは、エントリ ポイント呼び出しをトリガーした EnterUmsSchedulingMode 関数に渡されるUMS_SCHEDULER_STARTUP_INFO構造体の SchedulerParam メンバーです。

Reason パラメーターが UmsSchedulerThreadYield の場合、このパラメーターはエントリ ポイント呼び出しをトリガーした UmsThreadYield 関数に渡される SchedulerParam パラメーターです。

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

戻り値

なし

解説

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 関数を 使用します。

要件

要件
サポートされている最小のクライアント Windows 7 (64 ビットのみ) [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 R2 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winnt.h (WinBase.h、Windows.h を含む)

こちらもご覧ください

DequeueUmsCompletionListItems

EnterUmsSchedulingMode

UmsThreadYield