イベント オブジェクト (同期)
イベント オブジェクトは、SetEvent 関数を使用して状態を明示的にシグナルに設定できる同期オブジェクトです。 イベント オブジェクトの 2 種類を次に示します。
| Object | 説明 |
|---|---|
| 手動リセット イベント | ResetEvent 関数によって明示的に非署名にリセットされるまで状態がシグナル状態のままであるイベント オブジェクト。 シグナルが送信されている間は、待機中の任意の数のスレッド、または待機 関数の 1 つで同じイベント オブジェクトを指定したスレッドを解放できます。 |
| 自動リセット イベント | 1 つの待機中のスレッドが解放されるまで状態が通知された状態を保持するイベント オブジェクト。その時点で、システムは自動的に状態を非署名に設定します。 待機しているスレッドがない場合でも、イベント オブジェクトの状態はシグナルのままです。 複数のスレッドが待機している場合は、待機中のスレッドが選択されます。 先入れ先出し (FIFO) の順序は想定しないでください。 カーネル モードの APC などの外部イベントは、待機順序を変更できます。 |
イベント オブジェクトは、特定のイベントが発生したことを示すシグナルをスレッドに送信する場合に役立ちます。 たとえば、重複した入力と出力では、重複する操作が完了したときに、指定されたイベント オブジェクトがシグナル状態に設定されます。 1 つのスレッドで、複数の同時重複操作で異なるイベント オブジェクトを指定し、複数オブジェクト 待機関数 のいずれかを使用して、いずれかのイベント オブジェクトの状態が通知されるのを待機できます。
スレッドは 、CreateEvent または CreateEventEx 関数を使用してイベント オブジェクトを作成します。 作成スレッドは、オブジェクトの初期状態と、それが手動リセットイベントオブジェクトか自動リセットイベントオブジェクトかを指定します。 作成スレッドでは、イベント オブジェクトの名前を指定することもできます。 他のプロセスのスレッドは、 OpenEvent 関数の呼び出しでその名前を指定することで、既存のイベント オブジェクトへのハンドルを開くことができます。 ミューテックス、イベント、セマフォ、タイマー オブジェクトの名前の詳細については、「 プロセス間同期」を参照してください。
関連トピック