ILMDVRSink::SetOffsetToReach Example for C

This example shows how you can wait for the DVR sink to write data past a certain offset. This is useful if you want to wait for the data to become available before reading it.

The error checking has been omitted for clarity.

void WaitForData(ILMDVRSink* pSink, __int64 startOffset, long nBytes)
{
   long registrationId; // set this to a unique value in your application
   OLE_HANDLE dataWrittenEvent;
   OLE_HANDLE listChangedEvent;
   OLE_HANDLE offsetReachedEvent;

   // create the offset reached event
   ILMDVRSink_CreateEvents2(pSink, registrationId, GetCurrentProcessId(), &dataWrittenEvent, &listChangedEvent, &offsetChangedEvent);

   // instruct the sink to set the offset reached event once it reached nBytes past offset startOffset
   ILMDVRSink_SetOffsetToReach(pSink, registrationId, (double)(startOffset + nBytes));

   // wait for the event to be set
   WaitForSingleObject(offsetReachedEvent, INFINITE);

   // free the events
   ILMDVRSink_FreeEvents(pSink, registrationId);
}