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, &offsetReachedEvent); // 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((HANDLE)offsetReachedEvent, INFINITE); // free the events ILMDVRSink_FreeEvents(pSink, registrationId); }