UnregisterWaitEx

RegisterWaitForSingleObject 関数で発行された登録済み待機操作をキャンセルする。

UnregisterWaitEx WaitHandle, CompletionEvent

WaitHandle : [intptr] 待機ハンドル。RegisterWaitForSingleObject 関数が返す。
CompletionEvent : [intptr] 待機操作の登録解除完了時にシグナル状態にするイベントオブジェクトのハンドル。**NULL** を指定できる。**INVALID_HANDLE_VALUE** を指定すると、本関数はすべてのコールバック関数の完了を待ってから戻る。**NULL** を指定すると、本関数はタイマを削除対象としてマークし即座に戻る。ただし、後始末のためコールバック完了を待つのが推奨される。呼び出し側がこのイベントを提供して関数が成功または **ERROR_IO_PENDING** で失敗した場合、シグナル状態になるまでイベントを閉じてはならない。

(プラグイン / モジュール : kernel32.dll)

解説

RegisterWaitForSingleObject 関数で発行された登録済み待機操作をキャンセルする。

[戻り値]
関数が成功した場合、戻り値は 0 以外である。関数が失敗した場合、戻り値は 0 となる。拡張エラー情報を取得するには
**GetLastError** を呼ぶ。

[備考]
同じ待機操作のコールバック関数内から **UnregisterWaitEx**
へのブロッキング呼び出しはできない。さもなければコールバックが自身の完了を待つことになる。一般にブロッキング呼び出しは現在のスレッドとコールバックの間に依存関係を作るため、別の待機操作にブロッキング登録解除を行う場合、コールバック関数同士に依存関係がなく、第
2 の待機操作が第 1 の操作にブロッキング登録解除を行わないことを確認する必要がある。永続スレッド上でブロッキング
**UnregisterWaitEx** を呼ぶ際は注意。WT_EXECUTEINPERSISTENTTHREAD
で作成された待機操作の登録解除はデッドロックを引き起こす可能性がある。非ブロッキング **UnregisterWaitEx**
呼び出し後、WaitHandle
に関連付けられた新しいコールバック関数はキューイングできない。ただしワーカースレッドに既にキューイングされた保留中コールバックがある可能性はある。一定の条件下では
CompletionEvent が NULL のとき関数は ERROR_IO_PENDING
で失敗する。これはコールバックが残っており実行中または実行待ちであることを示す。CompletionEvent
が呼び出し側のイベントハンドルの場合、関数は成功・ERROR_IO_PENDING
で失敗・他のエラーコードで失敗のいずれかとなる。成功または ERROR_IO_PENDING
の場合は常にシグナル状態を待ってからイベントを閉じる必要がある。本関数を使うアプリケーションをコンパイルするには _WIN32_WINNT
を 0x0500 以上に定義する。

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs