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