MÉTHODE IDXCoreAdapterFactory::RegisterEventNotification

S’inscrit pour recevoir des notifications de conditions spécifiques à partir d’un adaptateur ou d’une liste d’adaptateurs DXCore. Pour obtenir des conseils de programmation et des exemples de code, consultez Utilisation de DXCore pour énumérer les 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) dont vous vous abonnez aux notifications.

notificationType

Type : DXCoreNotificationType

Type de notification pour laquelle vous vous inscrivez. Consultez le tableau 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), qui est 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 passé à 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éréférence le pointeur et définit la valeur sur une valeur de cookie différente de zéro représentant cette inscription. Utilisez cette valeur de cookie pour annuler l’inscription de la notification en appelant IDXCoreAdapterFactory::UnregisterEventNotification. Consultez Remarques.

En cas d’échec, la fonction déréférence 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, elle retourne un code d’erreurHRESULT.

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 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 répondant à 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 budgétisation de la mémoire s’est produit et que vous devez appeler IDXCoreAdapter::QueryState (avec DXCoreAdapterState::AdapterMemoryBudget) pour évaluer l’état budgétaire de la mémoire actuel. 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 la session de chiffrement actuelle status, par exemple, en appelant ID3D11VideoContext1::CheckCryptoSessionStatus pour déterminer l’impact de la destruction du 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 quant à l’ordre ou au minutage des rappels : plusieurs rappels peuvent se produire dans n’importe quel ordre, voire 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 l’appel de votre rappel. Plusieurs rappels pour une inscription spécifique sont sérialisés dans l’ordre.

Des rappels peuvent se produire à tout moment jusqu’à ce que vous appeliez UnregisterEventNotification et que l’opération se termine. Les rappels se produisent sur leurs propres threads, et vous pouvez effectuer des appels à l’API DXCore sur ces threads, y compris 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 désinscrire cet objet des 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 les adaptateurs