Метод CBaseRenderer.SourceThreadCanWait

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

Метод SourceThreadCanWait удерживает или освобождает поток потоковой передачи.

Синтаксис

virtual HRESULT SourceThreadCanWait(
   BOOL bCanWait
);

Параметры

bCanWait

Логическое значение, указывающее, следует ли удерживать поток потоковой передачи. Если задано значение TRUE, поток потоковой передачи блокируется, пока фильтр ожидает отрисовки следующих примеров. Если значение FALSE, поток потоковой передачи освобождается.

Возвращаемое значение

Возвращает S_OK.

Комментарии

При вызове SourceThreadCanWait метода со значением FALSE фильтр возвращается из заблокированного вызова IMemInputPin::Receive . При выполнении фильтра он блокирует вызовы Receive до момента презентации текущего примера. Когда фильтр приостановлен, он блокирует вызовы приема на неопределенный срок. Это поведение регулирует поток данных в потоке. Однако при остановке или очистке фильтра он не должен блокироваться.

Блокировка управляется методом CBaseRenderer::WaitForRenderTime , который ожидает двух событий: CBaseRenderer::m_RenderEvent и CBaseRenderer::m_ThreadSignal. Событие m_RenderEvent сигнализируется по истечении времени презентации. Событие m_ThreadSignal сигнализируется при SourceThreadCanWait вызове со значением FALSE. Вызов SourceThreadCanWait со значением TRUE сбрасывает событие.

Методы CBaseRenderer::Stop и CBaseRenderer::BeginFlush вызывают SourceThreadCanWait со значением FALSE (освобождая поток потоковой передачи). Методы CBaseRenderer::P ause, CBaseRenderer::Run и CBaseRenderer::EndFlush вызывают SourceThreadCanWait со значением TRUE.

Требования

Требование Значение
Заголовок
Renbase.h (включая Streams.h)
Библиотека
Strmbase.lib (розничные сборки);
Strmbasd.lib (отладочные сборки)

См. также раздел

Класс CBaseRenderer