Метод 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 .
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::QueryState (с DXCoreAdapterState::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