IDXCoreAdapterFactory::RegisterEventNotification-Methode

Registriert , um Benachrichtigungen über bestimmte Bedingungen von einem DXCore-Adapter oder einer Adapterliste zu empfangen. Programmierleitfäden und Codebeispiele finden Sie unter Verwenden von DXCore zum Aufzählen von Adaptern.

Syntax

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

Parameter

dxCoreObject [in]

Typ: IUnknown*

Das DXCore-Objekt (IDXCoreAdapter oder IDXCoreAdapterList), dessen Benachrichtigungen Sie abonnieren.

notificationType

Typ: DXCoreNotificationType

Der Typ der Benachrichtigung, für die Sie sich registrieren. Informationen dazu, welche Typen für welche Objekttypen gültig sind, finden Sie in der Tabelle in DXCoreNotificationType.

callbackFunction [in]

Typ: PFN_DXCORE_NOTIFICATION_CALLBACK

Ein Zeiger auf eine Rückruffunktion (von Ihrer Anwendung implementiert), die vom DXCore-Objekt für Benachrichtigungsereignisse aufgerufen wird. Die Signatur der Funktion finden Sie unter PFN_DXCORE_NOTIFICATION_CALLBACK.

callbackContext [in]

Typ: * void

Ein optionaler Zeiger auf ein Objekt, das Kontextinformationen enthält. Dieses Objekt wird an Ihre Rückruffunktion übergeben, wenn die Benachrichtigung ausgelöst wird.

eventCookie [out]

Typ: uint32_t *

Ein Zeiger auf einen uint32_t Wert. Bei Erfolg dereferenziert die Funktion den Zeiger und legt den Wert auf einen Cookiewert ungleich 0 (null) fest, der diese Registrierung darstellt. Verwenden Sie diesen Cookiewert, um die Registrierung bei der Benachrichtigung zu aufheben, indem Sie IDXCoreAdapterFactory::UnregisterEventNotificationaufrufen. Siehe Hinweise.

Wenn der Wert nicht erfolgreich ist, dereferenziert die Funktion den Zeiger und legt den Wert auf 0 (null) fest, was einen ungültigen Cookiewert darstellt.

Gibt zurück

Typ: HRESULT

Wenn die Funktion erfolgreich ausgeführt wird, wird S_OK zurückgegeben. Andernfalls wird ein HRESULT-Fehlercode zurückgegeben.

Rückgabewert Beschreibung
DXGI_ERROR_INVALID_CALL notificationType wird vom Betriebssystem nicht unterstützt.
E_INVALIDARG nullptr wurde für dxCoreObject bereitgestellt, oder , wenn eine ungültige NotificationType- und dxCoreObject-Kombination bereitgestellt wurde.
E_POINTER nullptr wurde entweder für callbackFunction oder eventCookie bereitgestellt.

Hinweise

Sie verwenden RegisterEventNotification, um sich für Ereignisse zu registrieren, die von den Schnittstellen IDXCoreAdapterList und IDXCoreAdapter ausgelöst werden. Diese Benachrichtigungstypen werden unterstützt.

DXCoreNotificationType Unterstützt dxCoreObject Hinweise
AdapterList State IDXCoreAdapterList Gibt an, dass sich die Liste der Adapter, die Ihre Filterkriterien erfüllen, geändert hat. Wenn die Adapterliste zum Zeitpunkt der Registrierung veraltet ist, wird ihr Rückruf sofort aufgerufen. Dieser Rückruf erfolgt höchstens einmal pro Registrierung.
AdapterNoLongerValid IDXCoreAdapter Gibt an, dass der Adapter nicht mehr gültig ist. Wenn der Adapter zur Registrierungszeit ungültig ist, wird der Rückruf sofort aufgerufen.
AdapterBudgetChange IDXCoreAdapter Gibt an, dass ein Speicherbudgetereignis aufgetreten ist und Dass Sie IDXCoreAdapter::QueryState (mit DXCoreAdapterState::AdapterMemoryBudget) aufrufen sollten, um den aktuellen Speicherbudgetstatus auszuwerten. Bei der Registrierung erfolgt immer ein erster Rückruf, mit dem Sie den Anfangszustand abfragen können.
AdapterHardwareContentProtectionTeardown IDXCoreAdapter Gibt an, dass Sie den aktuellen Status der Kryptositzung neu auswerten sollten. Beispielsweise durch Aufrufen von ID3D11VideoContext1::CheckCryptoSessionStatus, um die Auswirkungen der Hardwareentschlüsselung für eine bestimmte ID3D11CryptoSession-Schnittstelle zu bestimmen. Bei der Registrierung erfolgt immer ein erster Rückruf, mit dem Sie den Anfangszustand abfragen können.

Ein Aufruf der Funktion, die Sie in callbackFunction bereitstellen, wird von DXCore asynchron in einem Hintergrundthread ausgeführt, wenn das erkannte Ereignis auftritt. Es wird keine Garantie hinsichtlich der Reihenfolge oder des Zeitlichen Ablaufs von Rückrufen übernommen, bei der — mehrere Rückrufe in beliebiger Reihenfolge oder sogar gleichzeitig auftreten können. Es ist sogar möglich, dass Ihr Rückruf aufgerufen wird, bevor RegisterEventNotification abgeschlossen ist. In diesem Fall garantiert DXCore, dass EventCookie festgelegt ist, bevor Der Rückruf aufgerufen wird. Mehrere Rückrufe für eine bestimmte Registrierung werden in der reihenfolge serialisiert.

Rückrufe können jederzeit auftreten, bis Sie UnregisterEventNotificationaufrufen und abgeschlossen sind. Rückrufe erfolgen in ihren eigenen Threads, und Sie können Aufrufe an die DXCore-API für diese Threads durchführen, einschließlich UnregisterEventNotification. Sie dürfen jedoch nicht den letzten Verweis auf dxCoreObject in diesem Thread freigeben.

Wichtig

Bevor Sie das DXCore-Objekt zerstören, das durch das dxCoreObject-Argument dargestellt wird, das an RegisterEventNotification übergeben wird, müssen Sie den Cookiewert verwenden, um die Registrierung dieses Objekts bei Benachrichtigungen durch Aufrufen von IDXCoreAdapterFactory::UnregisterEventNotificationaufheben. Wenn Sie dies nicht tun, wird eine schwerwiegende Ausnahme ausgelöst, wenn die Situation erkannt wird.

Siehe auch

IDXCoreAdapter, IDXCoreAdapterList, IDXCoreAdapterFactory::UnregisterEventNotification, DXCore-Referenz, Verwenden von DXCore zum Auflisten von Adaptern