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
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 | nullptr wurde 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