IDXCoreAdapterFactory::RegisterEventNotification, méthode

S’inscrit pour recevoir des notifications de conditions spécifiques à partir d’une carte DXCore ou d’une liste d’adaptateurs. Pour obtenir des conseils de programmation et des exemples de code, consultez Utilisation de DXCore pour énumérer des adaptateurs.

Syntaxe

virtual HRESULT STDMETHODCALLTYPE RegisterEventNotification(
  _In_ IUnknown *dxCoreObject,
  DXCoreNotificationType notificationType,
  _In_ PFN_DXCORE_NOTIFICATION_CALLBACK callbackFunction,
  _In_opt_ void *callbackContext,
  _Out_ uint32_t *eventCookie) = 0;

Paramètres

dxCoreObject [in]

Type : IUnknown*

Objet DXCore (IDXCoreAdapter ou IDXCoreAdapterList) auquel vous êtes abonné.

notificationType

Type : DXCoreNotificationType

Type de notification pour lequel vous vous inscrivez. Consultez la table dans DXCoreNotificationType pour plus d’informations sur les types valides avec les types d’objets.

callbackFunction [in]

Type : PFN_DXCORE_NOTIFICATION_CALLBACK

Pointeur vers une fonction de rappel (implémentée par votre application), appelée par l’objet DXCore pour les événements de notification. Pour obtenir la signature de la fonction, consultez PFN_DXCORE_NOTIFICATION_CALLBACK.

callbackContext [in]

Type : void*

Pointeur facultatif vers un objet contenant des informations de contexte. Cet objet est transmis à votre fonction de rappel lorsque la notification est déclenchée.

eventCookie [out]

Type : uint32_t*

Pointeur vers une valeur uint32_t . Si elle réussit, la fonction désactive le pointeur et définit la valeur sur une valeur de cookie non nulle représentant cette inscription. Utilisez cette valeur de cookie pour annuler l’inscription à partir de la notification en appelant IDXCoreAdapterFactory::UnregisterEventNotification. Consultez Remarques.

En cas d’échec, la fonction désactive le pointeur et définit la valeur sur zéro, ce qui représente une valeur de cookie non valide.

Retours

Type : HRESULT

Si la fonction réussit, elle retourne S_OK. Sinon, il retourne un codeHRESULTerror.

Valeur retournée Description
DXGI_ERROR_INVALID_CALL notificationType n’est pas pris en charge par le système d’exploitation.
E_INVALIDARG nullptr a été fourni pour dxCoreObject, ou si une combinaison de notificationType et dxCoreObject non valide a été fournie.
E_POINTER nullptr a été fourni pour callbackFunction ou eventCookie.

Notes

Vous utilisez RegisterEventNotification pour vous inscrire aux événements déclenchés par les interfaces IDXCoreAdapterList et IDXCoreAdapter . Ces types de notification sont pris en charge.

DXCoreNotificationType DxCoreObject pris en charge Notes
AdapterListStale IDXCoreAdapterList Indique que la liste des adaptateurs qui répondent à vos critères de filtre a changé. Si la liste des adaptateurs est obsolète au moment de l’inscription, votre rappel est immédiatement appelé. Ce rappel se produit au plus une fois par inscription.
AdapterNoLongerValid IDXCoreAdapter Indique que l’adaptateur n’est plus valide. Si l’adaptateur n’est pas valide au moment de l’inscription, votre rappel est immédiatement appelé.
AdapterBudgetChange IDXCoreAdapter Indique qu’un événement de budget de mémoire s’est produit et que vous devez appeler IDXCoreAdapter::QueryState (avec DXCoreAdapterState::AdapterMemoryBudget) pour évaluer l’état actuel du budget de mémoire. Lors de l’inscription, un rappel initial se produit toujours pour vous permettre d’interroger l’état initial.
AdapterHardwareContentProtectionTeardown IDXCoreAdapter Indique que vous devez réévaluer l’état actuel de la session de chiffrement ; par exemple, en appelant ID3D11VideoContext1::CheckCryptoSessionStatus pour déterminer l’impact du retrait matériel pour une interface ID3D11CryptoSession spécifique. Lors de l’inscription, un rappel initial se produit toujours pour vous permettre d’interroger l’état initial.

Un appel à la fonction que vous fournissez dans callbackFunction est effectué de manière asynchrone sur un thread d’arrière-plan par DXCore lorsque l’événement détecté se produit. Aucune garantie n’est apportée à l’ordre ou au moment des rappels: plusieurs rappels peuvent se produire dans n’importe quel ordre, ou même simultanément. Il est même possible que votre rappel soit appelé avant la fin de RegisterEventNotification . Dans ce cas, DXCore garantit que votre eventCookie est défini avant que votre rappel soit appelé. Plusieurs rappels pour une inscription spécifique seront sérialisés dans l’ordre.

Les rappels peuvent se produire à tout moment jusqu’à ce que vous appeliez UnregisterEventNotification et qu’il se termine. Les rappels se produisent sur leurs propres threads et vous pouvez effectuer des appels dans l’API DXCore sur ces threads, notamment UnregisterEventNotification. Toutefois, vous ne devez pas publier la dernière référence à dxCoreObject sur ce thread.

Important

Avant de détruire l’objet DXCore représenté par l’argument dxCoreObject passé à RegisterEventNotification, vous devez utiliser la valeur de cookie pour annuler l’inscription de cet objet à partir de notifications en appelant IDXCoreAdapterFactory::UnregisterEventNotification. Si vous ne le faites pas, une exception irrécupérable est levée lorsque la situation est détectée.

Voir aussi

IDXCoreAdapter, IDXCoreAdapterList, IDXCoreAdapterFactory::UnregisterEventNotification, référence DXCore, utilisation de DXCore pour énumérer des adaptateurs