Microsoft DirectX 8.0

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 メンバ関数を呼び出して、処理しようとしているサンプルをパラメータとして渡す。これは、次のものを返す。

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

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

Protected データ メンバ

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

メンバ関数

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

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

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

CCmdQueue::CCmdQueue

CCmdQueue クラス

CCmdQueue オブジェクトを作成する。

構文

CCmdQueue(void);

戻り値

戻り値なし。

CCmdQueue::CheckTime

CCmdQueue クラス

指定された時間になったかどうかを判断する。

構文

BOOL CheckTime(
CRefTime time,
BOOL bStream
    );

パラメータ

time
チェックする時間。
bStream
time パラメータがストリームタイム値の場合は TRUE、time がプレゼンテーションタイム値の場合は FALSE。

戻り値

まだ指定された時間を過ぎていない場合は、TRUE を返す。

CCmdQueue::EndRun

CCmdQueue クラス

停止またはポーズ モードに切り替える。

構文

virtual HRESULT EndRun(void);

戻り値

実装に応じた HRESULT 値を返す。HRESULT はエラーを示し、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。
E_FAIL失敗。
E_POINTERNull ポインタ引数。
E_INVALIDARG無効な引数。
S_OK または NOERROR成功。

注意

このメンバ関数を呼び出した後のストリーム タイムとプレゼンテーション時間との時間のマッピングは不明である。CCmdQueue::Run メンバ関数を呼び出して、このマッピングを実行する。

CCmdQueue::GetCommandDueFor

CCmdQueue クラス

指定された時間にスケジュールされている遅延コマンドを取得する。

構文

virtual HRESULT GetCommandDueFor(
REFERENCE_TIME tStream,
CDeferredCommand **ppCmd
    );

パラメータ

tStream
コマンドがスケジュールされている時間。
ppCmd
tStream パラメータで指定された時間に実行される遅延コマンドへのポインタのアドレス。

戻り値

実行するコマンドがない場合は VFW_E_NOT_FOUND を返す。それ以外の場合は S_OK を返す。

注意

このメンバ関数は、ストリーム タイムを取り、その時間にスケジュールされている遅延コマンドを返す。実際のストリーム タイムのオフセットは、コマンド キューを実行するときに計算される。コマンドは、実行されるか、取り消されるまでキューに残る。このメンバ関数はブロックしない。

CCmdQueue::GetDueCommand

CCmdQueue クラス

次に実行する予定のコマンドへのポインタを取得する。

構文

virtual HRESULT GetDueCommand(
CDeferredCommand **ppCmd,
long msTimeout
    );

パラメータ

ppCmd
遅延コマンドへのポインタのアドレス。
msTimeout
タイムアウトを実行するまでに待機する時間。

戻り値

タイムアウトが発生した場合は、E_ABORT を返す。成功した場合は、S_OK を返す。それ以外の場合は、エラーを返す。IUnknown::AddRef を使用してインクリメントされたオブジェクトを返す。

注意

このメンバ関数は、保留中のコマンドが実行されるまでブロックする。このメンバ関数は、msTimeout パラメータでミリ秒単位で指定された時間ブロックする。ストリーム タイム コマンドは、CCmdQueue::Run メンバ関数と CCmdQueue::EndRun メンバ関数の呼び出しの間でのみ実行される。このコマンドは、実行されるか、取り消されるまでキューに残る。

CCmdQueue::GetDueHandle

CCmdQueue クラス

通知済のイベント ハンドルを取得する。

構文

HANDLE GetDueHandle(void);

戻り値

イベント ハンドルを返す。

注意

実行する予定の遅延コマンドがある場合はイベント ハンドルを返す (CCmdQueue::GetDueCommand がブロックする場合)。

CCmdQueue::Insert

CCmdQueue クラス

CDeferredCommand オブジェクトをキューに追加する。

構文

virtual HRESULT Insert(
CDeferredCommand *pCmd
    );

パラメータ

pCmd
キューに追加する CDeferredCommand オブジェクトへのポインタ。

戻り値

デフォルトの実装では S_OK を返す。

CCmdQueue::New

CCmdQueue クラス

実行するコマンドを初期化し、新しい CDeferredCommand オブジェクトを返す。

構文

virtual HRESULT New(
CDeferredCommand **ppCmd,
LPUNKNOWN pUnk,
REFTIME time,
GUID *iid,
long dispidMethod,
short wFlags,
long cArgs,
VARIANT *pDispParams,
VARIANT *pvarResult,
short *puArgErr,
BOOL bStream
    );

パラメータ

ppCmd
CDeferredCommand オブジェクトへのポインタのアドレス。これによって、アプリケーションはコマンドを取り消したり、コマンドの新しいプレゼンテーション時間を設定したり、予測情報を取得することができる。
pUnk
コマンドを実行するオブジェクトへのポインタ。
time
キューに入れられたコマンドを実行する時間。
iid
呼び出すインターフェイスのグローバル ユニーク識別子 (GUID) へのポインタ。
dispidMethod
呼び出されるインターフェイス上のメソッド。
wFlags
呼び出しのコンテキストを記述するフラグ。このパラメータは、OLE IDispatch::Invoke メソッドと同じフラグをサポートする。
cArgs
渡される引数の数。
pDispParams
ディスパッチ パラメータに関連付けられたバリアント型のリストへのポインタ。
pvarResult
結果が返されるリストへのポインタ。
puArgErr
最後のエラーが発生した pDispParams パラメータ リスト内のインデックスへのポインタ。
bStream
time パラメータがストリームタイム値 (TRUE) であるか、プレゼンテーションタイム値 (FALSE) であるかを示す値。

戻り値

成功した場合は、S_OK を返す。ppCmd が新しい CDeferredCommand オブジェクトの作成時に NULL を返す場合は、E_OUTOFMEMORY を返す。それ以外の場合は、新しい CDeferredCommand オブジェクトを作成使用としたときのエラーを示す HRESULT を返す。エラーが発生した場合は、オブジェクトはキューに入れられない。

注意

新しい CDeferredCommand オブジェクトはパラメータを使用して初期化され、作成中にキューに追加される。このメソッドは、OLE IDispatch::Invoke メソッドに似ている。

wFlags パラメータは、次のような値になる。
DISPATCH_METHOD メンバはメソッドとして実行されている。プロパティが同じ名前である場合は、これと DISPATCH_PROPERTYGET フラグの両方を設定できる。
DISPATCH_PROPERTYGET メンバはプロパティまたはデータ メンバとして取得されている。
DISPATCH_PROPERTYPUT メンバはプロパティまたはデータ メンバとして変更されている。
DISPATCH_PROPERTYPUTREF メンバは、値の割り当てではなく、参照の割り当てによって変更されている。この値は、プロパティがオブジェクトへの参照を受け入れる場合にのみ有効である。

CCmdQueue::Remove

CCmdQueue クラス

CDeferredCommand オブジェクトをキューから削除する。

構文

virtual HRESULT Remove(
CDeferredCommand *pCmd
    );

パラメータ

pCmd
キューから削除する CDeferredCommand オブジェクトへのポインタ。

戻り値

キュー内にオブジェクトが見つからなかった場合は VFW_E_NOT_FOUND を返す。それ以外の場合は、S_OK を返す。

CCmdQueue::Run

CCmdQueue クラス

ストリーム タイムによって遅延されているコマンドを実行できるように実行モードに切り替える。

構文

virtual HRESULT Run(
REFERENCE_TIME tStreamTimeOffset
    );

パラメータ

tStreamTimeOffset
オフセット タイム。

戻り値

デフォルトの実装では S_OK を返す。

注意

実行モードでは、ストリーム タイムとプレゼンテーション時間のマッピングが認識される。

CCmdQueue::SetSyncSource

CCmdQueue クラス

タイミングに使用するクロックを設定する。

構文

virtual HRESULT SetSyncSource(
IReferenceClock *pIrc
    );

パラメータ

pIrc
IReferenceClock インターフェイスへのポインタ。

戻り値

デフォルトの実装では S_OK を返す。

CCmdQueue::SetTimeAdvise

CCmdQueue クラス

基準クロックを使用してタイマ イベントを設定する。

構文

void SetTimeAdvise(void);

戻り値

戻り値なし。

注意

このメンバ関数は、IReferenceClock::AdviseTime メソッドを呼び出して、キュー内で必要な最も早い時間の通知を設定する。遅延されるプレゼンテーション時間コマンドは常にチェックされる。フィルタ グラフが実行モードである場合、ストリーム タイムを使用する遅延コマンドもチェックされる。