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 メソッドを呼び出すことである。
参照