指定したイベントオブジェクトをシグナル状態に設定し、適切な数の待機中スレッドを解放した後に非シグナル状態へリセットする。
PulseEvent hEvent
hEvent : [intptr] イベントオブジェクトのハンドル。CreateEvent または OpenEvent 関数がこのハンドルを返す。
(プラグイン / モジュール : kernel32.dll)
指定したイベントオブジェクトをシグナル状態に設定し、適切な数の待機中スレッドを解放した後に非シグナル状態へリセットする。 [戻り値] 関数が成功した場合、戻り値は 0 以外である。関数が失敗した場合、戻り値は 0 である。拡張エラー情報を取得するには GetLastError を呼ぶ。 [備考] 同期オブジェクトを待機しているスレッドは、カーネルモード APC によって一時的に待機状態から取り除かれ、APC 完了後に待機状態へ戻されることがある。PulseEvent の呼び出しが、スレッドが待機状態から取り除かれている間に発生すると、PulseEvent は呼び出された瞬間に待機しているスレッドしか解放しないため、そのスレッドは解放されない。したがって PulseEvent は信頼性がなく、新しいアプリケーションで使うべきではない。代わりに条件変数を使う。手動リセットイベントオブジェクトでは、即座に解放可能なすべての待機中スレッドが解放される。その後、関数はイベントオブジェクトの状態を非シグナル状態に戻して戻る。自動リセットイベントオブジェクトでは、複数のスレッドが待機していても単一の待機中スレッドを解放した後、状態を非シグナル状態にリセットして戻る。待機スレッドがない、または即座に解放できるスレッドがない場合、PulseEvent は単にイベントオブジェクトの状態を非シグナル状態に設定して戻る。指定したすべてのオブジェクトがシグナル状態になるのを待つ複数オブジェクト待機関数を使うスレッドについては、PulseEvent は待機関数を戻すことなくイベントオブジェクトの状態をシグナル状態に設定して非シグナル状態にリセットすることに注意。これは指定したオブジェクトのすべてが同時にシグナル状態でない場合に発生する。Windows 7 で [SignalObjectAndWait](/windows/win32/api/synchapi/nf-synchapi-signalobjectandwait) と PulseEvent を使う場合は、これらの API を複数スレッド間で使用するとアプリケーションのデッドロックを引き起こす可能性があるため、細心の注意を払うこと。SignalObjectAndWait でシグナルされたスレッドは、SignalObjectAndWait 呼び出しの待機オブジェクトをシグナルするために PulseEvent を呼ぶ。状況によっては、SignalObjectAndWait の呼び出し側が待機オブジェクトのシグナル状態を時間内に受信できず、デッドロックを引き起こすことがある。
| プラグイン / モジュール | kernel32.dll |
| バージョン | 1.0 |
| 作成日 | 2026/04/16 |
| 著作者 | IronHSP / CsWin32 bridge |
| URL | https://github.com/inovia/IronHSP |
| 備考 | Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。 |
| タイプ | 拡張命令 |
| グループ | Win32API |
| 対応環境 |
|
| hs ファイル | hsphelp\win32_kernel32_gen2.hs |