IDXCoreAdapterFactory::RegisterEventNotification 方法
注册以接收来自 DXCore 适配器或适配器列表的特定条件的通知。 有关编程指南和代码示例,请参阅 使用 DXCore 枚举适配器。
语法
virtual HRESULT STDMETHODCALLTYPE RegisterEventNotification(
_In_ IUnknown *dxCoreObject,
DXCoreNotificationType notificationType,
_In_ PFN_DXCORE_NOTIFICATION_CALLBACK callbackFunction,
_In_opt_ void *callbackContext,
_Out_ uint32_t *eventCookie) = 0;
参数
dxCoreObject [in]
类型: IUnknown*
DXCore 对象 (IDXCoreAdapter 或 IDXCoreAdapterList) 要订阅其通知。
notificationType
要注册的通知类型。 有关哪些类型对哪些类型的对象有效的信息,请参阅 DXCoreNotificationType 中的表。
callbackFunction [in]
类型: PFN_DXCORE_NOTIFICATION_CALLBACK
指向回调函数的指针 (应用程序) 实现,该函数由 DXCore 对象为通知事件调用。 有关函数的签名,请参阅 PFN_DXCORE_NOTIFICATION_CALLBACK。
callbackContext [in]
类型: void*
指向包含上下文信息的 对象的可选指针。 引发通知时,此对象将传递给回调函数。
eventCookie [out]
类型: uint32_t*
指向 uint32_t 值的指针。 如果成功,函数将取消引用指针,并将值设置为表示此注册的非零 Cookie 值。 使用此 Cookie 值通过调用 IDXCoreAdapterFactory::UnregisterEventNotification 从通知中注销。 请参阅备注。
如果失败,函数将取消引用指针并将值设置为零,这表示 Cookie 值无效。
返回
类型: HRESULT
如果函数成功,则返回 S_OK。 否则,它将返回 HRESULT错误代码。
返回值 | 描述 |
---|---|
DXGI_ERROR_INVALID_CALL | 操作系统 (OS) 不支持 notificationType。 |
E_INVALIDARG | nullptr 为 dxCoreObject 提供,或者是否提供了无效 的 notificationType 和 dxCoreObject 组合。 |
E_POINTER | nullptr 已为 callbackFunction 或 eventCookie 提供。 |
注解
使用 RegisterEventNotification 注册 IDXCoreAdapterList 和 IDXCoreAdapter 接口引发的事件。 支持这些通知类型。
DXCoreNotificationType | 支持的 dxCoreObject | 备注 |
---|---|---|
AdapterListStale | IDXCoreAdapterList | 指示满足筛选条件的适配器列表已更改。 如果适配器列表在注册时已过时,则会立即调用回调。 每次注册最多发生一次此回调。 |
AdapterNoLongerValid | IDXCoreAdapter | 指示适配器不再有效。 如果适配器在注册时无效,则会立即调用回调。 |
AdapterBudgetChange | IDXCoreAdapter | 指示发生了内存预算事件,并且应使用 DXCoreAdapterState::AdapterMemoryBudget) 调用 IDXCoreAdapter::QueryState (来评估当前内存预算状态。 注册后,将始终发生初始回调,以便查询初始状态。 |
AdapterHardwareContentProtectionTeardown | IDXCoreAdapter | 指示应重新评估当前加密会话状态;例如,通过调用 ID3D11VideoContext1::CheckCryptoSessionStatus 来确定硬件拆解对特定 ID3D11CryptoSession 接口的影响。 注册后,将始终发生初始回调,以便查询初始状态。 |
当检测到的事件发生时,DXCore 在后台线程上异步调用 callbackFunction 中提供的函数。 无法保证回调的排序或计时 - 多个回调可能以任何顺序发生,甚至同时发生。 甚至可以在 RegisterEventNotification 完成之前调用回调。 在这种情况下,DXCore 保证在调用回调之前设置 eventCookie 。 特定注册的多个回调将按顺序序列化。
回调可能随时发生,直到调用 UnregisterEventNotification 并完成。 回调在其自己的线程上发生,你可以在这些线程上调用 DXCore API,包括 UnregisterEventNotification。 但是,不得在此线程上释放对 dxCoreObject 的最后一个引用。
重要
在销毁传递给 RegisterEventNotification 的 dxCoreObject 参数表示的 DXCore 对象之前,必须使用 cookie 值通过调用 IDXCoreAdapterFactory::UnregisterEventNotification 从通知中注销该对象。 如果不这样做,则在检测到情况时会引发致命异常。
请参阅
IDXCoreAdapter、 IDXCoreAdapterList、 IDXCoreAdapterFactory::UnregisterEventNotification、 DXCore 参考、 使用 DXCore 枚举适配器
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈