IDXCoreAdapterFactory::RegisterEventNotification-Methode

Registriert, um Benachrichtigungen über bestimmte Bedingungen aus einer DXCore-Adapter- oder Adapterliste zu erhalten. Anleitungen zur Programmierung 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 registrieren. In der Tabelle in DXCoreNotificationType finden Sie Informationen zu den Typen, die für welche Arten von Objekten gültig sind.

callbackFunction [in]

Typ: PFN_DXCORE_NOTIFICATION_CALLBACK

Ein Zeiger auf eine Rückruffunktion (implementiert durch Ihre 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 mit Kontextinformationen. 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. Wenn die Funktion erfolgreich verläuft, wird der Zeiger abgeleitet und der Wert auf einen Nicht-Null-Cookie-Wert festgelegt, der diese Registrierung darstellt. Verwenden Sie diesen Cookiewert, um die Registrierung aus der Benachrichtigung zu aufheben, indem Sie IDXCoreAdapterFactory::UnregisterEventNotification aufrufen. Siehe Hinweise.

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

Gibt zurück

Typ: HRESULT

Wenn die Funktion erfolgreich ist, gibt sie S_OK zurück. Andernfalls wird ein HRESULTerrorcode zurückgegeben.

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

Hinweise

Sie verwenden RegisterEventNotification, um ereignisse zu registrieren, die von IDXCoreAdapterList und IDXCoreAdapter-Schnittstellen ausgelöst werden. Diese Benachrichtigungstypen werden unterstützt.

DXCoreNotificationType Unterstützte dxCoreObject Notizen
AdapterListStale IDXCoreAdapterList Gibt an, dass die Liste der Adapter, die Ihre Filterkriterien erfüllen, geändert wurde. Wenn die Adapterliste zum Zeitpunkt der Registrierung veraltet ist, wird ihr Rückruf sofort aufgerufen. Dieser Rückruf tritt am häufigsten einmal pro Registrierung auf.
AdapterNoLongerValid IDXCoreAdapter Gibt an, dass der Adapter nicht mehr gültig ist. Wenn der Adapter zur Registrierung ungültig ist, wird ihr Rückruf sofort aufgerufen.
AdapterBudgetChange IDXCoreAdapter Gibt an, dass ein Speicherbudgetereignis aufgetreten ist und sie IDXCoreAdapter::QueryState (mit DXCoreAdapterState::AdapterMemoryBudget) aufrufen sollten, um den aktuellen Speicherbudgetstatus zu bewerten. Bei der Registrierung tritt immer ein anfänglicher Rückruf auf, damit Sie den anfänglichen Zustand abfragen können.
AdapterHardwareContentProtectionTeardown IDXCoreAdapter Gibt an, dass Sie den aktuellen Kryptositzungsstatus erneut bewerten sollten; Indem Sie beispielsweise ID3D11VideoContext1::CheckCryptoSessionStatus aufrufen, um die Auswirkungen des Hardware-Teardowns für eine bestimmte ID3D11CryptoSession-Schnittstelle zu bestimmen. Bei der Registrierung tritt immer ein anfänglicher Rückruf auf, damit Sie den anfänglichen Zustand abfragen können.

Ein Aufruf der Funktion, die Sie in callbackFunction bereitstellen, wird asynchron auf einem Hintergrundthread von DXCore vorgenommen, wenn das erkannte Ereignis auftritt. Es wird keine Garantie für die Reihenfolge oder die Zeitdauer von Rückrufen vorgenommen – mehrere Rückrufe können in einer beliebigen Reihenfolge oder sogar gleichzeitig auftreten. Es ist sogar möglich, dass Ihr Rückruf aufgerufen werden kann, 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 auftreten, bis Sie "UnregisterEventNotification" aufrufen und es abgeschlossen ist. Rückrufe treten auf eigenen Threads auf, und Sie können Aufrufe in die DXCore-API auf diesen Threads vornehmen, einschließlich UnregisterEventNotification. Sie dürfen jedoch nicht den letzten Verweis auf das dxCoreObject auf diesem Thread freigeben.

Wichtig

Bevor Sie das DXCore-Objekt zerstören, das durch das dxCoreObject-Argument an RegisterEventNotification übergeben wird, müssen Sie den Cookiewert verwenden, um das Objekt aus Benachrichtigungen zu aufheben, indem Sie IDXCoreAdapterFactory::UnregisterEventNotification aufrufen. Wenn Sie das nicht tun, wird eine tödliche Ausnahme ausgelöst, wenn die Situation erkannt wird.

Siehe auch

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