IReferenceClock::AdvisePeriodic
AdvisePeriodic メソッドは、周期的アドバイズ要求を作成する。
構文
HRESULT AdvisePeriodic(
REFERENCE_TIME rtStartTime,
REFERENCE_TIME rtPeriodTime,
HSEMAPHORE hSemaphore,
DWORD_PTR *pdwAdviseCookie
);
パラメータ
rtStartTime
[in] 最初の通知のタイム (100 ナノ秒単位)。ゼロより大きく、MAX_TIME より小さくなければならない。
rtPeriodTime
[in] 通知の間のタイム (100 ナノ秒単位)。ゼロより大きな値でなければならない。
hSemaphore
[in] 呼び出し元によって作成されるセマフォのハンドル。
pdwAdviseCookie
[out] アドバイズ要求の識別子を受け取る変数へのポインタ。
戻り値
HRESULT 値を返す。次のいずれかの値を返す。
戻りコード | 説明 |
S_OK | 成功。 |
E_INVALIDARG | 無効なタイム値。 |
E_OUTOFMEMORY | 失敗。 |
E_POINTER | NULL ポインタ引数。 |
注意
クロックは、通知のたびに hSemaphore 引数で指定されたセマフォを解放する。それ以上通知が不要になった場合は IReferenceClock::Unadvise を呼び出し、この呼び出しによって返された pdwAdviseToken 値を渡す。
次のサンプル コードでは、作成後 5 秒およびそれ以降の 2 秒ごとに通知されるアドバイズ要求を作成している。
IReferenceClock *pRefClock = NULL;
// IReferenceClock ポインタを取得する (ここには示していない)。
DWORD dwAdviseToken;
HANDLE hSemaphore = CreateSemaphore(NULL, 0, 0x7FFFFFFF, NULL);
REFERENCE_TIME rtPeriodTime = 10000000; // 1 秒間隔
REFERENCE_TIME rtNow;
pRefClock->GetTime(&rtNow);
pRefClock->AdvisePeriodic(rtNow + (5 * rtPeriodTime),
rtPeriodTime,
hSemaphore,
&dwAdviseToken);
...
pRefClock->Unadvise(dwAdviseToken);
参照