Поделиться через


Метод IMediaEvent::GetEventHandle (control.h)

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

Метод GetEventHandle извлекает дескриптор события сброса вручную, которое остается сигнальным, пока очередь содержит уведомления о событиях.

Синтаксис

HRESULT GetEventHandle(
  [out] OAEVENT *hEvent
);

Параметры

[out] hEvent

Указатель на переменную, которая получает дескриптор события.

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

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

Комментарии

Диспетчер фильтров графа сохраняет событие сброса вручную, которое отражает состояние очереди событий. Если очередь содержит уведомления о событиях, происходит событие сброса вручную. Если очередь пуста, метод IMediaEvent::GetEvent сбрасывает событие.

Приложение может использовать это событие для определения состояния очереди. Первый вызов GetEventHandle для получения дескриптора события. Дождитесь передачи сигнала о событии с помощью такой функции, как WaitForSingleObject. При получении сигнала о событии вызовите метод IMediaEvent::GetEvent , чтобы получить уведомление о следующем событии из очереди. Диспетчер фильтров графов сохраняет сигнал события до тех пор, пока очередь не пуста; затем он сбрасывает событие.

Не закрывайте дескриптор события, возвращаемый этим методом, так как дескриптор события используется внутри графа фильтра. Кроме того, не используйте дескриптор после освобождения диспетчера фильтров графов, так как дескриптор становится недействительным после уничтожения диспетчера фильтров графов. (Чтобы избежать этой ошибки, рекомендуется дублировать дескриптор, вызвав DuplicateHandle, и использовать дубликат вместо исходного дескриптора. По завершении закройте повторяющийся дескриптор.)

Для обеспечения совместимости службы автоматизации этот метод принимает указатель на тип OAEVENT . В C++ объявите переменную типа HANDLE и приведите к ней указатель OAEVENT следующим образом:


HANDLE hEvent;
GetEventHandle( (OAEVENT*) &hEvent );

Еще один способ мониторинга очереди событий для приложений — вызов метода IMediaEventEx::SetNotifyWindow .

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header control.h (включая Dshow.h)
Библиотека Strmiids.lib

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

Коды ошибок и успешности

Интерфейс IMediaEvent