次の方法で共有


IMediaEvent::GetEventHandle

GetEventHandle メソッドは、キューにイベント通知が入っている間に通知済み状態の手動リセット イベントのハンドルを取得する。

構文

  HRESULT GetEventHandle(
  OAEVENT *hEvent
);

パラメータ

hEvent

[out] イベント ハンドルを受け取る変数へのポインタ。

戻り値

S_OK を返す。

注意

フィルタ グラフ マネージャはイベント キューの状態を反映した手動リセット イベントを保持する。キューにイベント通知が入っていると、手動リセット イベントが通知済みになる。キューが空の場合、IMediaEvent::GetEvent メソッドはそのイベントをリセットする。

アプリケーションはこのイベントを使ってキューの状態を確認できる。最初に GetEventHandle を呼び出してイベントのハンドルを取得する。WaitForSingleObject のような Microsoft® Windows® 関数を使って、イベントが通知済みになるまで待機する。イベントが通知済みになると、IMediaEvent::GetEvent メソッドを呼び出して次のイベント通知をキューから受け取る。フィルタ グラフ マネージャはキューが空になるまでイベント通知を保持し、その後イベントをリセットする。

このメソッドによって返されたイベント ハンドルを、フィルタ グラフが内部で使うので、閉じないこと。また、フィルタ グラフ マネージャを解放した後は、ハンドルを使わないこと。フィルタ グラフ マネージャが破棄された後はハンドルは無効になるからである。このエラーを避けるために、DuplicateHandle を呼び出してハンドルを複製し、元のハンドルの代わりに複製したハンドルを使うとよい。使い終わったら、複製したハンドルを閉じる。

Automation との互換性のため、このメソッドは OAEVENT 型へのポインタを受け取る。C++ では、次のように HANDLE 型の変数を宣言し、その変数を OAEVENT ポインタにキャストする。

HANDLE hEvent;
GetEventHandle( (OAEVENT*) &hEvent );

アプリケーションがイベント キューをモニタするもう 1 つの方法は IMediaEventEx::SetNotifyWindow メソッドを呼び出すことである。

参照