IReferenceClock::AdvisePeriodic method (strmif.h)

[The feature associated with this page, DirectShow, is a legacy feature. It has been superseded by MediaPlayer, IMFMediaEngine, and Audio/Video Capture in Media Foundation. Those features have been optimized for Windows 10 and Windows 11. Microsoft strongly recommends that new code use MediaPlayer, IMFMediaEngine and Audio/Video Capture in Media Foundation instead of DirectShow, when possible. Microsoft suggests that existing code that uses the legacy APIs be rewritten to use the new APIs if possible.]

The AdvisePeriodic method creates a periodic advise request.

Syntax

HRESULT AdvisePeriodic(
  [in]  REFERENCE_TIME startTime,
  [in]  REFERENCE_TIME periodTime,
  [in]  HSEMAPHORE     hSemaphore,
  [out] DWORD_PTR      *pdwAdviseCookie
);

Parameters

[in] startTime

Time of the first notification, in 100-nanosecond units. Must be greater than zero and less than MAX_TIME.

[in] periodTime

Time between notifications, in 100-nanosecond units. Must be greater than zero.

[in] hSemaphore

Handle to a semaphore, created by the caller.

[out] pdwAdviseCookie

Pointer to a variable that receives an identifier for the advise request.

Return value

Returns an HRESULT value. Possible values include the following.

Return code Description
S_OK
Success.
E_INVALIDARG
Invalid time values.
E_OUTOFMEMORY
Failure.
E_POINTER
NULL pointer argument.

Remarks

At each notification time, the clock releases the semaphore specified in the hSemaphore parameter. When no further notifications are required, call IReferenceClock::Unadvise and pass the pdwAdviseToken value returned from this call.

The following code example creates an advise request that signals five seconds from the time it is created, and again every second thereafter:

C++
IReferenceClock *pRefClock = NULL;
// Get an IReferenceClock pointer (not shown).

DWORD dwAdviseToken; HANDLE hSemaphore = CreateSemaphore(NULL, 0, 0x7FFFFFFF, NULL); REFERENCE_TIME rtPeriodTime = 10000000; // A one-second interval REFERENCE_TIME rtNow;

pRefClock->GetTime(&rtNow); pRefClock->AdvisePeriodic(rtNow + (5 * rtPeriodTime), rtPeriodTime, hSemaphore, &dwAdviseToken); ...

pRefClock->Unadvise(dwAdviseToken);

Requirements

Requirement Value
Minimum supported client Windows 2000 Professional [desktop apps only]
Minimum supported server Windows 2000 Server [desktop apps only]
Target Platform Windows
Header strmif.h (include Dshow.h)
Library Strmiids.lib

See also

Error and Success Codes

IReferenceClock Interface