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 MyClass::WaitForData(ILMDVRSink* pSink, __int64 startOffset, long nBytes)
{
long registrationId = (long)this; // set this to a unique value in your application
OLE_HANDLE dataWrittenEvent;
OLE_HANDLE listChangedEvent;
OLE_HANDLE offsetReachedEvent;
// create the offset reached event
pSink->CreateEvents2(registrationId, GetCurrentProcessId(), &dataWrittenEvent, &listChangedEvent, &offsetChangedEvent);
// instruct the sink to set the offset reached event once it reached nBytes past offset startOffset
pSink->SetOffsetToReach(registrationId, (double)(startOffset + nBytes));
// wait for the event to be set
WaitForSingleObject(offsetReachedEvent, INFINITE);
// free the events
pSink->FreeEvents(registrationId);
}