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