次の方法で共有


CCmdQueue クラス

CCmdQueue クラスは、CDeferredCommand オブジェクトのキュー、およびキューに入れられたコマンドの追加、削除、状態チェック、実行のためのメンバ関数を提供する基底クラスである。CCmdQueue オブジェクトは、IQueueCommand メソッドを実装するオブジェクトの一部である。フィルタ グラフ マネージャは、IQueueCommand メソッドを実装し、アプリケーションがフィルタ グラフに対するコマンドをキューに入れることができるようにする。IQueueCommand インターフェイスを実装するフィルタは、このクラスを直接使用する。CDeferredCommand オブジェクトを使う場合は、このクラスからキューを派生させなければならない。

同期には、粗いモードと正確なモードという 2 つのモードがある。粗いモードでは、アプリケーションは指定された時間まで待機した後、コマンドを実行する。正確なモードでは、アプリケーションは、その時間に表示するサンプルに対する処理が開始されるまで待機した後、コマンドを実行する。どちらを実装するかは、フィルタによって決まる。フィルタ グラフ マネージャは、フィルタ グラフ マネージャのキューに入れられるコマンドについて、常に粗いモードを実装する。

粗い同期が必要な場合、実行すべきコマンドがキューに入れられるまで待機した後、コマンドを実行することができる。これは、CCmdQueue::GetDueCommand を呼び出すことによって実行できる。複数の項目を待機している場合は、CCmdQueue::GetDueHandle からイベント ハンドルを取得し、通知済みになったら CCmdQueue::GetDueCommand を呼び出す。ストリーム タイムは、CCmdQueue::Run メンバ関数と CCmdQueue::EndRun メンバ関数の呼び出しの間でのみ進む。ハンドルが設定されていても、コマンドの準備ができているという保証はない。イベントが通知済みになるたびに、(タイムアウトを 0 にして) GetDueCommand メンバ関数を呼び出す。これによって、コマンドの準備ができていない場合は、E_ABORT を返すことができる。

正確な同期が必要な場合は、CCmdQueue::GetCommandDueFor メンバ関数を呼び出して、処理しようとしているサンプルをパラメータとして渡す。この場合、次の項目が返される。

  • ストリーム タイム時またはその前に実行しなければならないストリーム タイム コマンド。
  • ストリーム タイムのプレゼンテーション時またはその前に実行しなければならないプレゼンテーション タイム コマンド。これは、CCmdQueue::Run および CCmdQueue::EndRun メンバ関数の間でのみ行う。この範囲外の場合、ストリーム タイムからプレゼンテーション タイムへのマッピングが認識されない。
  • 現在実行しなければならないプレゼンテーション タイム コマンド。

ポーズ モード時に処理される可能性のあるサンプルについて正確な同期が必要な場合は、ストリーム タイム コマンドを使わなければならない。

すべての場合において、コマンドは呼び出されるか取り消されるまでキューに残る。イベント ハンドルの設定およびリセットは、すべてこのキュー オブジェクトによって管理される。

プロテクト データ メンバ

m_bRunning 実行状態のフラグ。実行中の場合は TRUE に設定される。
m_dwAdvise 基準クロックからのアドバイズ識別子 (未処理のアドバイズがない場合は 0)。
m_evDue コマンドを実行する時間を設定する。
m_listPresentation プレゼンテーション タイムのキューに入れられたコマンドを格納する。
m_listStream ストリーム タイムのキューに入れられたコマンドを格納する。
m_Lock リストへのアクセスを保護する。
m_pClock 現在の基準クロック。
m_StreamTimeOffset m_bRunning が TRUE である場合のストリーム タイムのオフセットを格納する。
m_StreamTimeOffset m_bRunning が TRUE である場合のストリーム タイムのオフセットを格納する。

メンバ関数

CCmdQueue CCmdQueue オブジェクトを作成する。
CheckTime 指定された時間になったかどうかを判断する。
GetDueHandle 通知するイベント ハンドルを取得する。

オーバーライド可能なメンバ関数

EndRun 停止またはポーズ モードに切り替える。
GetCommandDueFor 指定された時間にスケジュールされている遅延コマンドを取得する。
GetDueCommand 次に実行する予定のコマンドへのポインタを取得する。
Insert CDeferredCommand オブジェクトをキューに追加する。
New 実行するコマンドを初期化し、新しい CDeferredCommand オブジェクトを返す。
Remove CDeferredCommand オブジェクトをキューから削除する。
Run 実行モードに切り替える。
SetSyncSource タイミングに使うクロックを設定する。
SetTimeAdvise 基準クロックを使ってタイマ イベントを設定する。