Метод IDXCoreAdapterFactory::RegisterEventNotification

Регистрируется для получения уведомлений о конкретных условиях из списка адаптеров или адаптеров DXCore. Рекомендации по программированию и примеры кода см. в разделе "Использование DXCore для перечисления адаптеров".

Синтаксис

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

Параметры

dxCoreObject [in]

Тип: IUnknown*

Объект DXCore (IDXCoreAdapter или IDXCoreAdapterList), уведомления которого вы подписываетесь.

notificationType

Тип: DXCoreNotificationType

Тип уведомления, для который вы регистрируетесь. Сведения о допустимых типах объектов см. в таблице DXCoreNotificationType .

callbackFunction [in]

Тип: PFN_DXCORE_NOTIFICATION_CALLBACK

Указатель на функцию обратного вызова (реализованную приложением), которая вызывается объектом DXCore для событий уведомлений. Сигнатуру функции см. PFN_DXCORE_NOTIFICATION_CALLBACK.

callbackContext [in]

Тип: void*

Необязательный указатель на объект, содержащий сведения о контексте. Этот объект передается функции обратного вызова при возникновении уведомления.

eventCookie [out]

Тип: uint32_t*

Указатель на значение uint32_t . В случае успешного выполнения функция разыменовывает указатель и задает значение, отличное от нуля, представляющее эту регистрацию. Используйте это значение cookie для отмены регистрации уведомления путем вызова IDXCoreAdapterFactory::UnregisterEventNotification. См. Примечания.

В случае неудачи функция разыменовывает указатель и присваивает нулю значение, представляющее недопустимое значение файла cookie.

Возвращаемое значение

Тип: HRESULT

Если функция выполнена успешно, она возвращает S_OK. В противном случае возвращается код HRESULTerror.

Возвращаемое значение Описание
DXGI_ERROR_INVALID_CALL notificationType не поддерживается операционной системой (ОС).
E_INVALIDARG nullptr была предоставлена для dxCoreObject или была предоставлена недопустимая комбинация notificationType и dxCoreObject .
E_POINTER nullptr предоставляется для callbackFunction или eventCookie.

Remarks

Для регистрации событий, вызванных интерфейсами IDXCoreAdapterList и IDXCoreAdapter, используется RegisterEventNotification. Поддерживаются эти типы уведомлений.

DXCoreNotificationType Поддерживается dxCoreObject Примечания
AdapterListStale IDXCoreAdapterList Указывает, что список адаптеров, соответствующих условиям фильтра, изменился. Если список адаптеров устарел во время регистрации, обратный вызов немедленно вызывается. Этот обратный вызов выполняется не более одного раза на регистрацию.
AdapterNoLongerValid IDXCoreAdapter Указывает, что адаптер больше недействителен. Если адаптер недопустим во время регистрации, обратный вызов немедленно вызывается.
AdapterBudgetChange IDXCoreAdapter Указывает, что произошло событие бюджетирования памяти и необходимо вызвать IDXCoreAdapter::QueryStateDXCoreAdapterState::AdapterMemory Budget) для оценки текущего состояния бюджета памяти. При регистрации начальный обратный вызов всегда будет выполняться, чтобы разрешить запрашивать начальное состояние.
AdapterHardwareContentProtectionTeardown IDXCoreAdapter Указывает, что следует повторно оценить текущее состояние сеанса шифрования; Например, вызывая ID3D11VideoContext1::CheckCryptoSessionStatus , чтобы определить влияние разрыва оборудования для определенного интерфейса ID3D11CryptoSession . При регистрации начальный обратный вызов всегда будет выполняться, чтобы разрешить запрашивать начальное состояние.

Вызов функции, предоставляемой в callbackFunction , выполняется асинхронно в фоновом потоке DXCore при возникновении обнаруженного события. Никаких гарантий относительно порядка или времени обратного вызова не гарантируется— несколько обратных вызовов могут выполняться в любом порядке или даже одновременно. Обратный вызов может вызываться даже до завершения RegisterEventNotification . В этом случае DXCore гарантирует, что перед вызовом обратного вызова задается событиеCookie . Несколько обратных вызовов для определенной регистрации сериализуются в порядке.

Обратные вызовы могут выполняться в любое время, пока не будет выполнен вызов UnregisterEventNotification. Обратные вызовы выполняются в собственных потоках, и вы можете выполнять вызовы API DXCore в этих потоках, включая UnregisterEventNotification. Однако не следует освобождать последнюю ссылку на dxCoreObject в этом потоке.

Важно!

Перед уничтожением объекта DXCore, представленного аргументом dxCoreObject , переданным в RegisterEventNotification, необходимо использовать значение cookie для отмены регистрации этого объекта из уведомлений путем вызова IDXCoreAdapterFactory::UnregisterEventNotification. Если этого не сделать, при обнаружении ситуации возникает неустранимое исключение.

См. также

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