Поделиться через


Метод IMFDXGIDeviceManager::LockDevice (mfobjects.h)

Предоставляет вызывающей объекту монопольный доступ к устройству Microsoft Direct3D.

Синтаксис

HRESULT LockDevice(
  [in]  HANDLE hDevice,
  [in]  REFIID riid,
  [out] void   **ppUnkDevice,
  [in]  BOOL   fBlock
);

Параметры

[in] hDevice

Дескриптор для устройства Direct3D. Чтобы получить дескриптор устройства, вызовите IMFDXGIDeviceManager::OpenDeviceHandle.

[in] riid

Идентификатор IID запрошенного интерфейса. Устройство Direct3D будет поддерживать следующие интерфейсы:

[out] ppUnkDevice

Получает указатель на запрошенный интерфейс. Вызывающий объект должен освободить интерфейс .

[in] fBlock

Указывает, следует ли ждать блокировки устройства. Если устройство уже заблокировано и этот параметр имеет значение TRUE, метод блокируется, пока устройство не будет разблокировано. В противном случае, если устройство заблокировано и этот параметр имеет значение FALSE, метод возвращает немедленно с кодом ошибки DXVA2_E_VIDEO_DEVICE_LOCKED.

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

Этот метод может возвращать одно из этих значений.

Код возврата Описание
S_OK
Успешно.
E_HANDLE
Указанный дескриптор не является дескриптором устройства Direct3D.
MF_E_DXGI_DEVICE_NOT_INITIALIZED
Диспетчер устройств DXGI не инициализирована. Владелец устройства должен вызвать IMFDXGIDeviceManager::ResetDevice.
MF_E_DXGI_NEW_VIDEO_DEVICE
Недопустимый дескриптор устройства.
MF_E_DXGI_VIDEO_DEVICE_LOCKED
Устройство заблокировано, а fBlock имеет значение FALSE.

Комментарии

Завершив работу с устройством Direct3D, вызовите IMFDXGIDeviceManager::UnlockDevice , чтобы разблокировать устройство.

Если метод возвращает MF_E_DXGI_NEW_VIDEO_DEVICE, вызовите метод IMFDXGIDeviceManager::CloseDeviceHandle , чтобы закрыть дескриптор, а затем снова вызовите OpenDeviceHandle , чтобы получить новый дескриптор. Метод IMFDXGIDeviceManager::ResetDevice делает недействительными все открытые дескрипторы устройств.

Если fBlock имеет значение TRUE, этот метод потенциально может привести к взаимоблокировки. Например, он будет взаимоблокирован, если поток вызывает LockDevice , а затем ожидает другого потока, который вызывает LockDevice. Он также будет взаимоблокирован, если поток вызывает LockDevice дважды, не вызывая UnlockDevice между ними.

Требования

Требование Значение
Минимальная версия клиента Windows 8 [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2012 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header mfobjects.h (включая Mfidl.h)

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

IMFDXGIDeviceManager