Microsoft DirectX 8.0

CAMSchedule クラス

基準クロックのスケジューラ。

宣言: Schedule.h

このヘルパー オブジェクトは、基準クロックのアドバイズ要求のリストを維持する。CBaseReferenceClock クラスは、このオブジェクトを使ってアドバイズ要求のスケジューリングを手助けする。クロックは、このオブジェクトを次のように使用する。

  1. クロックは、ワーカー スレッドを作成してスケジューリングを処理する。
  2. ワーカー スレッドは GetEvent メソッドを呼び出して、スケジューラからイベント ハンドルを取得する。スレッドは、最初は無限タイムアウトを使って、このイベントで待ち状態となる。
  3. 新しいアドバイズ要求をスケジュールするため、クロックは AddAdvisePacket メソッドを呼び出す。アドバイズ要求は、単発または周期的なものとすることができる。スケジューラは、時間順に要求リストを維持する。
  4. リストの先頭に要求が追加されると、スケジューラはイベントを通知する。このリストは最初は空であるので、最初の要求があるとイベントは確実に通知される。
  5. イベントが通知済になると、ワーカー スレッドは Advise メソッドを呼び出し、現在の基準タイムを指定する。保留中の要求の有効期限が切れると、スケジューラはそれらの要求をディスパッチする。
  6. Advise メソッドは、次の要求のタイムを返す。ワーカー スレッドはこの値を使って、新しいタイムアウト値を計算する。
  7. ステップ 2 〜 6 は、無限に繰り返される。
  8. ワーカー スレッドを終了するため、クロックは内部フラグを設定し、イベントを通知する。

ステップ 2 では、イベントが通知済になるか、または待ちのタイムアウトが発生する。イベントが通知済になる場合は、新しい要求がリストの先頭に追加されたことを意味する。ワーカー スレッドは新しいタイムアウト値を計算しなければならない。一方、待ちのタイムアウトが発生する場合は、アドバイズ要求の期限期限が切れており、ディスパッチされなければならないことを意味する。いずれの場合も、ステップ 5 の Advise の呼び出しによって処理が行われる。

Public メソッド
CAMScheduleコンストラクタ メソッド。
~CAMScheduleデストラクタ メソッド。仮想。
GetAdviseCount保留中のアドバイス要求数を取得する。
GetNextAdviseTime次のアドバイズ要求のタイムを取得する。
AddAdvisePacket保留中の要求リストにアドバイズ要求を追加する。
Unadviseアドバイズ要求を削除する。
Advise特定のタイムまたはそれ以前にスケジュールされた、すべての要求をディスパッチする。
GetEventイベント ハンドルを取得する。これは、次のアドバイズ タイムの変更を通知するために使われる。

CAMSchedule::AddAdvisePacket

CAMSchedule クラス

新しい保留中の通知を作成し、アドバイズ通知リストに追加する。

構文

DWORD AddAdvisePacket(
    const REFERENCE_TIME& time1,
    const REFERENCE_TIME& time2,
    HANDLE hNotify,
    BOOL bPeriodic
);

パラメータ

time1
アドバイズの要求タイム。
time2
周期的なアドバイズ要求での通知の間隔。bPeriodic が FALSE の場合、このパラメータは無視される。
hNotify
bPeriodic が TRUE の場合はセマフォ ハンドル。bPeriodic が FALSE の場合はイベント ハンドル。
bPeriodic
周期的な通知を追加するか、単発の通知を追加するかを指定するブール値。TRUE の場合、通知は周期的になる。time2 パラメータによって、通知の間隔が指定される。FALSE の場合、通知は単発で発生する。

戻り値

アドバイズ要求の識別子 (Cookie) を返す。メソッドが失敗した場合、戻り値は 0 になる。

CAMSchedule::Advise

CAMSchedule クラス

特定のタイムまたはそれ以前にスケジュールされた、すべての要求をディスパッチする。

構文

REFERENCE_TIME Advise(
    const REFERENCE_TIME& rtTime
);

パラメータ

rtTime
現在の基準タイムを指定する値。

戻り値

次にスケジュールされたアドバイズ要求の基準タイムを返す。アドバイズがない場合は MAX_TIME を返す。

注意

クロックがこのメソッドを呼び出す際に、現在の基準タイムを指定する。スケジューラは、有効期限が切れたアドバイズを判定し、それらをディスパッチする。単発要求の有効期限が切れた場合、スケジューラはその要求を削除する。周期的な要求の有効期限が切れた場合、スケジューラは次のアドバイズ タイムにそれらを再スケジュールする。このメソッドは、保留中の次の要求のタイムを返す。

アドバイズ要求をディスパッチするため、スケジューラは、AddAdvisePacket メソッドの hNotify パラメータに指定されたイベントまたはセマフォを通知する。

CAMSchedule::CAMSchedule

CAMSchedule クラス

コンストラクタ メソッド。

構文

CAMSchedule(
    HANDLE hEvent
);

パラメータ

hEvent
自動リセット イベントへのハンドル。

CAMSchedule::~CAMSchedule

CAMSchedule Class

デストラクタ メソッド。

構文

~CAMSchedule(void);

CAMSchedule::GetAdviseCount

CAMSchedule クラス

未処理のアドバイス要求の数を取得する。

構文

DWORD GetAdviseCount(void);

戻り値

未処理のイベントの数を返す。

CAMSchedule::GetEvent

CAMSchedule クラス

アドバイズ タイムが再評価を必要とする場合に、設定するイベント ハンドルを取得する。

構文

HANDLE GetEvent(void);

戻り値

このオブジェクトのアドバイズ タイムが再評価を必要とする場合に、設定するイベントへのハンドルを返す。

CAMSchedule::GetNextAdviseTime

CAMSchedule クラス

次のアドバイズのタイムをチェックする。

構文

REFERENCE_TIME GetNextAdviseTime(void);

戻り値

次のアドバイズが設定されている基準タイムを返す。イベントがスケジュールされていない場合は MAX_TIME を返す。

CAMSchedule::Unadvise

CAMSchedule クラス

アドバイズ リクエストを削除する。

構文

HRESULT Unadvise(
    DWORD dwAdviseCookie
);

パラメータ

dwAdviseCookie
アドバイズ リクエストの識別子。この値は、AddAdvisePacket メソッドによって返される。

戻り値

以下の表にある HRESULT 値の 1 つを返す。

S_FALSE見つけられない
S_OK成功