CAMSchedule クラス
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
クラスは CAMSchedule
、参照クロック用のスケジューラを実装します。
パブリック メソッド | 説明 |
---|---|
CAMSchedule | コンストラクター メソッド。 |
~CAMSchedule | デストラクター メソッド。 仮想。 |
GetAdviseCount | 保留中のアドバイス要求の数を取得します。 |
GetNextAdviseTime | 次のアドバイス要求の時刻を取得します。 |
AddAdvisePacket | 保留中の要求の一覧にアドバイス要求を追加します。 |
Unadvise | アドバイス要求を削除します。 |
助言 | 指定した時刻以前にスケジュールされているすべての要求をディスパッチします。 |
Getevent | イベント ハンドルを取得します。これは、次回のアドバイス時に変更を通知するために使用されます。 |
解説
このヘルパー オブジェクトは、参照クロックに対するアドバイズ要求の一覧を保持します。 CBaseReferenceClock クラスは、それを使用してアドバイス要求をスケジュールするのに役立ちます。 クロックでは、次の方法でこのオブジェクトが使用されます。
- クロックは、スケジュールを処理するワーカー スレッドを作成します。
- ワーカー スレッドは CAMSchedule::GetEvent メソッドを呼び出して、スケジューラからイベント ハンドルを取得します。 このイベントは、最初は無限のタイムアウトで待機します。
- 新しいアドバイス要求をスケジュールするために、クロックは CAMSchedule::AddAdvisePacket メソッドを 呼び出します。 アドバイズ要求には、ワンショットまたは定期的な要求を指定できます。 スケジューラは、要求の一覧を時間順に保持します。
- 要求がリストの先頭に追加されると、スケジューラによってイベントが通知されます。 (最初はリストが空であるため、最初の要求はイベントを通知することが保証されます)。
- イベントが通知されると、ワーカー スレッドは CAMSchedule::Advise メソッドを呼び出し、現在の参照時刻を指定します。 保留中の要求の有効期限が切れている場合、スケジューラは要求をディスパッチします。
- Advise メソッドは、次の要求の時刻を返します。 ワーカー スレッドは、この値を使用して新しいタイムアウト値を計算します。
- 手順 2 6 は無期限に繰り返されます。
- ワーカー スレッドを終了するために、クロックによって内部フラグが設定され、イベントが通知されます。
手順 2 では、イベントがシグナル通知されるか、待機がタイムアウトします。イベントが通知された場合は、リストの先頭に新しい要求が追加されたことを意味します。 ワーカー スレッドは、新しいタイムアウト値を計算する必要があります。 一方、待機がタイムアウトした場合は、アドバイス要求が期限切れであり、ディスパッチする必要があることを意味します。 手順 5 で Advise を呼び出すと、両方のケースが処理されます。
要件
要件 | 値 |
---|---|
ヘッダー |
|
ライブラリ |
|