Метод 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, представляющего эту регистрацию. Используйте это значение файла cookie, чтобы отменить регистрацию уведомления, вызвав IDXCoreAdapterFactory::UnregisterEventNotification. См. Примечания.

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

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

Тип: HRESULT

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

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

Комментарии

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

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

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

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

Важно!

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

См. также раздел

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