UnregisterWaitEx 関数
RegisterWaitForSingleObject 関数によって発行された登録済みの待機操作を取り消します。
構文
BOOL WINAPI UnregisterWaitEx(
_In_ HANDLE WaitHandle,
_In_opt_ HANDLE CompletionEvent
);
パラメーター
-
WaitHandle [in]
-
待機ハンドル。 このハンドルは RegisterWaitForSingleObject 関数によって返されます。
-
CompletionEvent [in, optional]
-
待機操作の登録が解除されたときに通知されるイベント オブジェクトへのハンドル。 このパラメーターは、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 [デスクトップ アプリのみ] |
Header |
|
ライブラリ |
|
[DLL] |
|
関連項目