次の方法で共有


PulseEvent 関数 (winbase.h)

指定したイベント オブジェクトをシグナル状態に設定し、適切な数の待機スレッドを解放した後、非署名状態にリセットします。

メモ この関数は信頼性が低く、使用しないでください。 これは主に下位互換性のために存在します。 詳細については、「解説」を参照してください。
 

構文

BOOL PulseEvent(
  [in] HANDLE hEvent
);

パラメーター

[in] hEvent

イベント オブジェクトへのハンドル。 CreateEvent または OpenEvent 関数は、このハンドルを返します。

ハンドルには、EVENT_MODIFY_STATEアクセス権が必要です。 詳細については、「 同期オブジェクトのセキュリティとアクセス権」を参照してください。

戻り値

関数が成功すると、戻り値は 0 以外になります。

関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

同期オブジェクトで待機しているスレッドは、カーネル モード APC によって待機状態から一時的に削除され、APC の完了後に待機状態に戻ることができます。 スレッドが待機状態から削除されている間に PulseEvent の呼び出しが発生した場合、 PulseEvent は呼び出された時点で待機しているスレッドのみを解放するため、スレッドは解放されません。 そのため、 PulseEvent は信頼性が低く、新しいアプリケーションでは使用しないでください。 代わりに、 条件変数を使用します。

手動リセット イベント オブジェクトの場合、すぐに解放できる待機中のすべてのスレッドが解放されます。 次に、 関数はイベント オブジェクトの状態を非署名にリセットし、 を返します。

自動リセット イベント オブジェクトの場合、関数は状態を非署名にリセットし、複数のスレッドが待機している場合でも、1 つの待機スレッドを解放した後に を返します。

待機しているスレッドがない場合、またはすぐに解放できるスレッドがない場合、 PulseEvent はイベント オブジェクトの状態を非署名に設定し、 を返します。

複数オブジェクト 待機関数 を使用するスレッドが、指定されたすべてのオブジェクトのシグナル通知を待機する場合、 PulseEvent はイベント オブジェクトの状態をシグナルに設定し、待機関数を返さずに非署名にリセットできることに注意してください。 これは、指定されたすべてのオブジェクトが同時にシグナル通知されない場合に発生します。

Windows 7 で SignalObjectAndWaitPulseEvent を使用する場合は、複数のスレッドでこれらの API を使用するとアプリケーションがデッドロックする可能性があるため、細心の注意を払ってください。 SignalObjectAndWait によって通知されるスレッドは、PulseEvent を呼び出して、SignalObjectAndWait 呼び出しの待機オブジェクトに通知します。 状況によっては、 SignalObjectAndWait の呼び出し元が待機オブジェクトのシグナル状態を時間内に受信できないため、デッドロックが発生します。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー winbase.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

CreateEvent

イベント オブジェクト

OpenEvent

ResetEvent

SetEvent

同期関数