UnregisterWaitEx 関数 (threadpoollegacyapiset.h)
RegisterWaitForSingleObject 関数によって発行された登録済み待機操作を取り消します。
構文
BOOL UnregisterWaitEx(
[in] HANDLE WaitHandle,
[in, optional] HANDLE CompletionEvent
);
パラメーター
[in] WaitHandle
待機ハンドル。 このハンドルは RegisterWaitForSingleObject 関数によって返されます。
[in, optional] CompletionEvent
待機操作の登録が解除されたときに通知されるイベント オブジェクトへのハンドル。 このパラメーターは、NULL でもかまいません。
このパラメーターが INVALID_HANDLE_VALUEの場合、関数はすべてのコールバック関数が完了するまで待機してから、 を返します。
このパラメーターが NULL の場合、関数はタイマーに削除のマークを付け、直ちに を返します。 ただし、ほとんどの呼び出し元は、必要なクリーンアップを実行できるように、コールバック関数が完了するまで待つ必要があります。
呼び出し元がこのイベントを提供し、関数が成功した場合、または関数 がERROR_IO_PENDINGで失敗した場合は、通知されるまでイベントを閉じないでください。
戻り値
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
同じ待機操作のコールバック関数内から UnregisterWaitEx をブロック呼び出すことはできません。 それ以外の場合、コールバックはそれ自体が完了するのを待機します。 一般に、 UnregisterWaitEx のブロック呼び出しでは、現在のスレッドとコールバックの間に依存関係が作成されるため、別の待機操作でブロック登録解除呼び出しを行うには、コールバック関数が相互に依存しないようにし、2 番目の待機操作で最初の操作でブロック解除呼び出しも実行しないようにする必要があります。
永続的なスレッドで UnregisterWaitEx 呼び出しをブロックする場合は注意してください。 登録解除中の待機操作が WT_EXECUTEINPERSISTENTTHREADで作成された場合は、デッドロックが発生する可能性があります。
UnregisterWaitEx に対して非ブロッキング呼び出しを行った後、WaitHandle に関連付けられている新しいコールバック関数をキューに入れることはできません。 ただし、保留中のコールバック関数が既にワーカー スレッドにキューに登録されている可能性があります。
一部の条件下では、CompletionEvent が NULL の場合、関数は ERROR_IO_PENDING で失敗します。 これは、未処理のコールバック関数があることを示します。 これらのコールバックは、実行されるか、実行中です。
CompletionEvent が呼び出し元によって提供されるイベントのハンドルである場合、関数が成功するか、ERROR_IO_PENDINGで失敗するか、別のエラー コードで失敗する可能性があります。 関数が成功した場合、または関数が ERROR_IO_PENDING で失敗した場合、呼び出し元は常にイベントが通知されるまで待機してイベントを閉じる必要があります。 関数が別のエラー コードで失敗した場合、イベントが通知されるまで待機してイベントを閉じる必要はありません。
Windows XP: CompletionEvent が呼び出し元によって提供されるイベントのハンドルであり、関数が ERROR_IO_PENDING で失敗した場合、呼び出し元はイベントが通知されるまで待機してイベントを閉じる必要があります。 この動作は、Windows Vista 以降で変更されました。
この関数を使用するアプリケーションをコンパイルするには、 _WIN32_WINNTを 0x0500 以降として定義します。 詳細については、「 Windows ヘッダーの使用」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | threadpoollegacyapiset.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |