次の方法で共有


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);

参照