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 对象 (IDXCoreAdapterIDXCoreAdapterList) 要订阅其通知。

notificationType

类型: DXCoreNotificationType

要注册的通知类型。 有关哪些类型对哪些类型的对象有效的信息,请参阅 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 nullptrdxCoreObject 提供,或者是否提供了无效 的 notificationTypedxCoreObject 组合。
E_POINTER nullptr 已为 callbackFunctioneventCookie 提供。

注解

使用 RegisterEventNotification 注册 IDXCoreAdapterListIDXCoreAdapter 接口引发的事件。 支持这些通知类型。

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 的最后一个引用。

重要

在销毁传递给 RegisterEventNotificationdxCoreObject 参数表示的 DXCore 对象之前,必须使用 cookie 值通过调用 IDXCoreAdapterFactory::UnregisterEventNotification 从通知中注销该对象。 如果不这样做,则在检测到情况时会引发致命异常。

请参阅

IDXCoreAdapterIDXCoreAdapterListIDXCoreAdapterFactory::UnregisterEventNotificationDXCore 参考使用 DXCore 枚举适配器