次の方法で共有


CAMSchedule クラス

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

クラスは CAMSchedule 、参照クロック用のスケジューラを実装します。

パブリック メソッド 説明
CAMSchedule コンストラクター メソッド。
~CAMSchedule デストラクター メソッド。 仮想。
GetAdviseCount 保留中のアドバイス要求の数を取得します。
GetNextAdviseTime 次のアドバイス要求の時刻を取得します。
AddAdvisePacket 保留中の要求の一覧にアドバイス要求を追加します。
Unadvise アドバイス要求を削除します。
助言 指定した時刻以前にスケジュールされているすべての要求をディスパッチします。
Getevent イベント ハンドルを取得します。これは、次回のアドバイス時に変更を通知するために使用されます。

解説

このヘルパー オブジェクトは、参照クロックに対するアドバイズ要求の一覧を保持します。 CBaseReferenceClock クラスは、それを使用してアドバイス要求をスケジュールするのに役立ちます。 クロックでは、次の方法でこのオブジェクトが使用されます。

  1. クロックは、スケジュールを処理するワーカー スレッドを作成します。
  2. ワーカー スレッドは CAMSchedule::GetEvent メソッドを呼び出して、スケジューラからイベント ハンドルを取得します。 このイベントは、最初は無限のタイムアウトで待機します。
  3. 新しいアドバイス要求をスケジュールするために、クロックは CAMSchedule::AddAdvisePacket メソッドを 呼び出します。 アドバイズ要求には、ワンショットまたは定期的な要求を指定できます。 スケジューラは、要求の一覧を時間順に保持します。
  4. 要求がリストの先頭に追加されると、スケジューラによってイベントが通知されます。 (最初はリストが空であるため、最初の要求はイベントを通知することが保証されます)。
  5. イベントが通知されると、ワーカー スレッドは CAMSchedule::Advise メソッドを呼び出し、現在の参照時刻を指定します。 保留中の要求の有効期限が切れている場合、スケジューラは要求をディスパッチします。
  6. Advise メソッドは、次の要求の時刻を返します。 ワーカー スレッドは、この値を使用して新しいタイムアウト値を計算します。
  7. 手順 2 6 は無期限に繰り返されます。
  8. ワーカー スレッドを終了するために、クロックによって内部フラグが設定され、イベントが通知されます。

手順 2 では、イベントがシグナル通知されるか、待機がタイムアウトします。イベントが通知された場合は、リストの先頭に新しい要求が追加されたことを意味します。 ワーカー スレッドは、新しいタイムアウト値を計算する必要があります。 一方、待機がタイムアウトした場合は、アドバイス要求が期限切れであり、ディスパッチする必要があることを意味します。 手順 5 で Advise を呼び出すと、両方のケースが処理されます。

要件

要件
ヘッダー
Dsschedule.h (Streams.h を含む)
ライブラリ
Strmbase.lib (小売ビルド);
Strmbasd.lib (デバッグ ビルド)