IMediaEvent::GetEventHandle 方法 (control.h)
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
方法 GetEventHandle
检索在队列包含事件通知时保持信号的手动重置事件的句柄。
语法
HRESULT GetEventHandle(
[out] OAEVENT *hEvent
);
参数
[out] hEvent
指向接收事件句柄的变量的指针。
返回值
返回 S_OK。
注解
Filter Graph 管理器会保留一个反映事件队列状态的手动重置事件。 如果队列包含事件通知,则会发出手动重置事件信号。 如果队列为空, IMediaEvent::GetEvent 方法将重置事件。
应用程序可以使用此事件来确定队列的状态。 第一次调用 GetEventHandle
以获取事件的句柄。 使用 WaitForSingleObject 等函数等待事件发出信号。 发出事件信号时,调用 IMediaEvent::GetEvent 方法以从队列中检索下一个事件通知。 Filter Graph 管理器会一直向事件发出信号,直到队列为空;然后重置事件。
请勿关闭此方法返回的事件句柄,因为筛选器图在内部使用该事件句柄。 此外,在释放筛选器关系图管理器后不要使用该句柄,因为在销毁筛选器关系图管理器后,句柄将变为无效。 (为了避免此错误,最好通过调用 DuplicateHandle 来复制句柄,并使用重复句柄而不是原始句柄。完成后关闭重复句柄。)
为了实现自动化兼容性,此方法采用指向 OAEVENT 类型的指针。 在 C++ 中,声明 HANDLE 类型的变量并将其强制转换为 OAEVENT 指针,如下所示:
HANDLE hEvent;
GetEventHandle( (OAEVENT*) &hEvent );
应用程序监视事件队列的另一种方法是调用 IMediaEventEx::SetNotifyWindow 方法。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | control.h (包括 Dshow.h) |
Library | Strmiids.lib |