次の方法で共有


DequeueUmsCompletionListItems 関数 (winbase.h)

指定した UMS 完了リストからユーザー モード スケジューリング (UMS) ワーカー スレッドを取得します。

警告

Windows 11時点では、ユーザー モードのスケジュール設定はサポートされていません。 すべての呼び出しがエラー ERROR_NOT_SUPPORTEDで失敗します。

構文

BOOL DequeueUmsCompletionListItems(
  [in]  PUMS_COMPLETION_LIST UmsCompletionList,
  [in]  DWORD                WaitTimeOut,
  [out] PUMS_CONTEXT         *UmsThreadList
);

パラメーター

[in] UmsCompletionList

ワーカー スレッドを取得する入力候補リストへのポインター。

[in] WaitTimeOut

取得操作のタイムアウト間隔 (ミリ秒単位)。 ワーカー スレッドが完了リストにキューに登録されていない場合でも、この関数は間隔が経過した場合に を返します。

WaitTimeOut パラメーターが 0 の場合、ワーカー スレッドが使用可能になるのを待たずに、使用可能なワーカー スレッドの完了リストがチェックされます。 WaitTimeOut パラメーターが INFINITE の場合、関数のタイムアウト間隔は経過しません。 ただし、1 つ以上のワーカー スレッドが使用可能になるまで関数がブロックされるため、これはお勧めしません。

[out] UmsThreadList

UMS_CONTEXT変数へのポインター。 出力時に、このパラメーターは UMS スレッド コンテキストの一覧で最初の UMS スレッド コンテキストへのポインターを受け取ります。

WaitTimeOut パラメーターで指定されたタイムアウトの前にワーカー スレッドが使用できない場合、このパラメーターは NULL に設定されます。

戻り値

関数が成功すると、0 以外の値が返されます。

関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。 考えられるエラー値は次のとおりです。

リターン コード 説明
ERROR_TIMEOUT
指定されたタイムアウト間隔が経過する前に、スレッドが使用できなくなりました。
ERROR_NOT_SUPPORTED
UMS はサポートされていません。

注釈

システムは、ワーカー スレッドが作成されたとき、または以前にブロックされたワーカー スレッドのブロックが解除されたときに、UMS ワーカー スレッドを完了リストにキューに入れます。 DequeueUmsCompletionListItems 関数は、指定した完了リスト内のすべてのスレッド コンテキストのリストへのポインターを取得します。 GetNextUmsListItem 関数を使用すると、UMS スレッド コンテキストをリストからスケジューラの準備完了スレッド キューにポップできます。 スケジューラは、アプリケーションによって選択された優先順位に基づいて実行するスレッドを選択します。

DequeueUmsCompletionListItems によって提供されるリストから UMS スレッドを直接実行したり、リストが完全に空になる前に、リストから準備完了のスレッド キューに転送されたスレッドを実行したりしないでください。 これにより、アプリケーションで予期しない動作が発生する可能性があります。

複数の呼び出し元が共有完了リストからスレッドを取得しようとすると、最初の呼び出し元のみがスレッドを取得します。 後続の呼び出し元の場合、 DequeueUmsCompletionListItems 関数は 成功を返しますが、 UmsThreadList パラメーターは NULL に設定されます。

要件

要件
サポートされている最小のクライアント Windows 7 (64 ビットのみ) [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 R2 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winbase.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll
API セット api-ms-win-core-ums-l1-1-0 (Windows 7 で導入)

こちらもご覧ください

GetNextUmsListItem