Metodo IDirect3DDeviceManager9::LockDevice (dxva2api.h)
Concede al chiamante l'accesso esclusivo al dispositivo Direct3D.
Sintassi
HRESULT LockDevice(
[in] HANDLE hDevice,
[out] IDirect3DDevice9 **ppDevice,
[in] BOOL fBlock
);
Parametri
[in] hDevice
Handle per il dispositivo Direct3D. Per ottenere l'handle del dispositivo, chiama IDirect3DDeviceManager9::OpenDeviceHandle.
[out] ppDevice
Riceve un puntatore all'interfaccia IDirect3DDevice9 del dispositivo.
[in] fBlock
Specifica se attendere il blocco del dispositivo. Se il dispositivo è già bloccato e questo parametro è TRUE, il metodo si blocca fino a quando il dispositivo non viene sbloccato. In caso contrario, se il dispositivo è bloccato e questo parametro è FALSE, il metodo restituisce immediatamente con il codice di errore DXVA2_E_VIDEO_DEVICE_LOCKED.
Valore restituito
Il metodo restituisce un valore HRESULT. I valori possibili includono, ma non sono limitati a, quelli indicati nella tabella seguente.
Codice restituito | Descrizione |
---|---|
|
Il metodo è riuscito. |
|
L'handle del dispositivo non è valido. |
|
La gestione dispositivi Direct3D non è stata inizializzata. Il proprietario del dispositivo deve chiamare IDirect3DDeviceManager9::ResetDevice. |
|
Il dispositivo è bloccato e fBlock è FALSE. |
|
L'handle specificato non è un handle del dispositivo Direct3D. |
Commenti
Al termine dell'uso del dispositivo Direct3D, chiama IDirect3DDeviceManager9::UnlockDevice per sbloccare il dispositivo.
Se il metodo restituisce DXVA2_E_NEW_VIDEO_DEVICE, chiamare IDirect3DDeviceManager9::CloseDeviceHandle per chiudere l'handle e quindi chiamare nuovamente OpenDeviceHandle per ottenere un nuovo handle. Il metodo IDirect3DDeviceManager9::ResetDevice invalida tutti gli handle di dispositivo aperti.
Se fBlock è TRUE, questo metodo può potenzialmente causare deadlock. Ad esempio, si verifica un deadlock se un thread chiama LockDevice e quindi attende su un altro thread che chiama LockDevice. Inoltre, se un thread chiama LockDevice due volte senza chiamare UnlockDevice tra.
Esempio
HRESULT LockDevice(
IDirect3DDeviceManager9 *pDeviceManager,
BOOL fBlock,
IDirect3DDevice9 **ppDevice, // Receives a pointer to the device.
HANDLE *pHandle // Receives a device handle.
)
{
*pHandle = NULL;
*ppDevice = NULL;
HANDLE hDevice = 0;
HRESULT hr = pDeviceManager->OpenDeviceHandle(&hDevice);
if (SUCCEEDED(hr))
{
hr = pDeviceManager->LockDevice(hDevice, ppDevice, fBlock);
}
if (hr == DXVA2_E_NEW_VIDEO_DEVICE)
{
// Invalid device handle. Try to open a new device handle.
hr = pDeviceManager->CloseDeviceHandle(hDevice);
if (SUCCEEDED(hr))
{
hr = pDeviceManager->OpenDeviceHandle(&hDevice);
}
// Try to lock the device again.
if (SUCCEEDED(hr))
{
hr = pDeviceManager->LockDevice(hDevice, ppDevice, TRUE);
}
}
if (SUCCEEDED(hr))
{
*pHandle = hDevice;
}
return hr;
}
Requisiti
Client minimo supportato | Windows Vista [solo app desktop] |
Server minimo supportato | Windows Server 2008 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | dxva2api.h |