RegisterWaitForSingleObject

スレッドプール内の待機スレッドにオブジェクトを待機するよう指示する。

RegisterWaitForSingleObject phNewWaitObject, hObject, Callback, Context, dwMilliseconds, dwFlags

phNewWaitObject : [intptr] 戻り時に待機ハンドルを受け取る変数へのポインタ。待機ハンドルは CloseHandle などのオブジェクトハンドルを必要とする関数では使用できない点に注意。
hObject : [intptr] オブジェクトへのハンドル。ハンドルを指定可能なオブジェクト型の一覧は以下の Remarks セクションを参照。
Callback : [int] hObject がシグナル状態になるか dwMilliseconds が経過した際に実行される WAITORTIMERCALLBACK 型のアプリケーション定義関数へのポインタ。詳細は WaitOrTimerCallback を参照。
Context : [intptr] コールバック関数に渡される単一の値。
dwMilliseconds : [int] タイムアウト間隔(ミリ秒単位)。オブジェクトの状態が非シグナルでも、間隔が経過すれば関数は戻る。dwMilliseconds が 0 の場合、関数はオブジェクトの状態をテストして即座に戻る。dwMilliseconds が INFINITE の場合、関数のタイムアウト間隔は決して経過しない。
dwFlags : [int] 

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

解説

スレッドプール内の待機スレッドにオブジェクトを待機するよう指示する。

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

[備考]

必要に応じて新しい待機スレッドが自動的に作成される。待機操作はスレッドプールの待機スレッドで実行される。コールバックルーチンは、オブジェクトがシグナル状態になるかタイムアウト間隔が経過したときにワーカースレッドで実行される。dwFlags
が WT_EXECUTEONLYONCE
でない場合、イベントがシグナル状態になるかタイムアウト間隔が経過するたびにタイマがリセットされる。待機が完了したら、待機操作をキャンセルするために
UnregisterWait または UnregisterWaitEx 関数を呼び出す必要がある(WT_EXECUTEONLYONCE
を使用する待機操作でもキャンセルする必要がある)。コールバック関数内からこれらの関数へのブロッキング呼び出しを行ってはならない。RegisterWaitForSingleObject
に渡したイベントオブジェクトをパルスしてはならない点に注意。待機スレッドがイベントのリセット前にシグナル状態を検知しない可能性があるためである。シグナル状態のまま残り続けるオブジェクト(手動リセットイベントや終了したプロセスなど)を登録する場合は、WT_EXECUTEONLYONCE
または WT_EXECUTEINWAITTHREAD
フラグを設定する必要がある。他のフラグでは、イベントがリセットされる前にコールバック関数が何度も呼び出される可能性がある。この関数は一部の同期オブジェクトの状態を変更する。変更は、その待機条件を満たしたシグナル状態を引き起こしたオブジェクトに対してのみ行われる。たとえばセマフォオブジェクトのカウントは
1 減少する。RegisterWaitForSingleObject 関数は次のオブジェクトを待機できる。
(以下省略)

情報

プラグイン / モジュール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