IDXCoreAdapterFactory::RegisterEventNotification-Methode

Registriert, um Benachrichtigungen zu bestimmten Bedingungen von einem DXCore-Adapter oder einer Adapterliste zu erhalten. Programmieranleitungen und Codebeispiele finden Sie unter Verwenden von DXCore zum Auflisten 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 mit welchen Objekttypen gültig sind, finden Sie in der Tabelle in DXCoreNotificationType .

callbackFunction [in]

Typ: PFN_DXCORE_NOTIFICATION_CALLBACK

Ein Zeiger auf eine Rückruffunktion (implementiert von Ihrer Anwendung), 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 erfolgreicher Ausführung dereferenziert die Funktion den Zeiger und legt den Wert auf einen Cookiewert ungleich Null fest, der diese Registrierung darstellt. Verwenden Sie diesen Cookiewert, um die Registrierung bei der Benachrichtigung aufzuheben, indem Sie IDXCoreAdapterFactory::UnregisterEventNotification aufrufen. Siehe Hinweise.

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

Gibt zurück

Typ: HRESULT

Wenn die Funktion erfolgreich ist, 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 Kombination aus notificationType und dxCoreObject 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ützte dxCoreObject-Objekte Notizen
AdapterListStale IDXCoreAdapterList Gibt an, dass sich die Liste der Adapter, die Ihren Filterkriterien entsprechen, 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 zum Zeitpunkt der Registrierung ungültig ist, wird der Rückruf sofort aufgerufen.
AdapterBudgetChange IDXCoreAdapter Gibt an, dass ein Speicherbudgetierungsereignis aufgetreten ist und Sie IDXCoreAdapter::QueryState (mit DXCoreAdapterState::AdapterMemoryBudget) aufrufen sollten, um den aktuellen Speicherbudgetstatus auszuwerten. Bei der Registrierung erfolgt immer ein anfänglicher Rückruf, damit Sie den Anfangszustand abfragen können.
AdapterHardwareContentProtectionTeardown IDXCoreAdapter Gibt an, dass Sie die aktuelle kryptografische Sitzung status erneut auswerten sollten, z. B. durch Aufrufen von ID3D11VideoContext1::CheckCryptoSessionStatus, um die Auswirkungen des Hardwareabbruchs für eine bestimmte ID3D11CryptoSession-Schnittstelle zu bestimmen. Bei der Registrierung erfolgt immer ein anfänglicher Rückruf, damit Sie den Anfangszustand abfragen können.

Ein Aufruf der Funktion, die Sie in callbackFunction bereitstellen, wird asynchron von DXCore in einem Hintergrundthread ausgeführt, wenn das erkannte Ereignis auftritt. Es wird keine Garantie für die Reihenfolge oder den Zeitpunkt von Rückrufen gemacht. Es können mehrere Rückrufe in beliebiger Reihenfolge oder sogar gleichzeitig erfolgen. Es ist sogar möglich, dass Ihr Rückruf aufgerufen wird, bevor RegisterEventNotification abgeschlossen ist. In diesem Fall garantiert DXCore, dass Ihr eventCookie festgelegt wird, bevor Ihr Rückruf aufgerufen wird. Mehrere Rückrufe für eine bestimmte Registrierung werden in der Reihenfolge serialisiert.

Rückrufe können jederzeit erfolgen, bis Sie UnregisterEventNotification aufrufen und abgeschlossen sind. Rückrufe erfolgen in ihren eigenen Threads, und Sie können aufruft die DXCore-API für diese Threads, einschließlich UnregisterEventNotification. Sie dürfen jedoch nicht den letzten Verweis auf das 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 in Benachrichtigungen aufzuheben, indem Sie IDXCoreAdapterFactory::UnregisterEventNotification aufrufen. Wenn Sie dies nicht tun, wird eine schwerwiegende Ausnahme ausgelöst, wenn die Situation erkannt wird.

Siehe auch

IDXCoreAdapter, IDXCoreAdapterList, IDXCoreAdapterFactory::UnregisterEventNotification, DXCore Reference, Using DXCore to enumerate adapters