IMediaControl::StopWhenReady

StopWhenReady メソッドは、フィルタがデータをキューに入れられるようにフィルタ グラフをポーズにし、次にフィルタ グラフを停止する。

構文

  HRESULT StopWhenReady(void);

戻り値

HRESULT 値を返す。可能な値は次のとおりである。

説明
S_OK 成功。
S_FALSE メソッドが返ったときに、グラフはポーズ状態に移行中だった。

注意

グラフが停止しているときにフィルタ グラフをシークする場合、このメソッドは有用である。フィルタ グラフが停止している限り、現在位置を変更しても新しいフレームでビデオ ウィンドウは再描画しない。したがって、IMediaSeeking::SetPositions を呼び出しても、ビデオ ウィンドウは更新されない。シーク操作後ウィンドウを更新するには StopWhenReady を呼び出す。このメソッドはグラフをポーズ状態に移行させ、ポーズ操作が完了するのを待ち、グラフを停止状態に再度移行させる。ポーズ操作はグラフのデータをキューに入れるので、ビデオ レンダラは新しいフレームを受け取って表示する。

このメソッドは非同期である。別スレッドでポーズが完了するまで待機する。呼び出し元スレッドは動作を停止せず、アプリケーションがユーザー入力に応答できるようにする。メソッドが返ったとき、ポーズ操作が完了する前であっても、グラフの論理状態は停止となる。この時点で IMediaControl::GetState メソッドを呼び出すと State_Stopped が返る。

ポーズ操作が完了する前に、アプリケーションから別の状態変更コマンド (ポーズ、実行、シークなど) が発行されると、新しいコマンドはペンディング状態の停止コマンドをキャンセルする。ポーズ操作は完了するが、グラフは停止しない。

参照