Metode IDirect3DDeviceManager9::LockDevice (dxva2api.h)
Memberi penelepon akses eksklusif ke perangkat Direct3D.
Sintaks
HRESULT LockDevice(
[in] HANDLE hDevice,
[out] IDirect3DDevice9 **ppDevice,
[in] BOOL fBlock
);
Parameter
[in] hDevice
Handel ke perangkat Direct3D. Untuk mendapatkan handel perangkat, panggil IDirect3DDeviceManager9::OpenDeviceHandle.
[out] ppDevice
Menerima pointer ke antarmuka IDirect3DDevice9 perangkat.
[in] fBlock
Menentukan apakah akan menunggu kunci perangkat. Jika perangkat sudah dikunci dan parameter ini TRUE, metode akan memblokir hingga perangkat tidak terkunci. Jika tidak, jika perangkat dikunci dan parameter ini FALSE, metode akan segera kembali dengan kode kesalahan DXVA2_E_VIDEO_DEVICE_LOCKED.
Menampilkan nilai
Metode mengembalikan HRESULT. Nilai yang mungkin termasuk, tetapi tidak terbatas pada, yang ada dalam tabel berikut.
Menampilkan kode | Deskripsi |
---|---|
|
Metode berhasil. |
|
Handel perangkat tidak valid. |
|
Manajer perangkat Direct3D tidak diinisialisasi. Pemilik perangkat harus memanggil IDirect3DDeviceManager9::ResetDevice. |
|
Perangkat terkunci dan fBlockfalse. |
|
Handel yang ditentukan bukan handel perangkat Direct3D. |
Keterangan
Setelah selesai menggunakan perangkat Direct3D, panggil IDirect3DDeviceManager9::UnlockDevice untuk membuka kunci ke perangkat.
Jika metode mengembalikan DXVA2_E_NEW_VIDEO_DEVICE, panggil IDirect3DDeviceManager9::CloseDeviceHandle untuk menutup handel lalu panggil OpenDeviceHandle lagi untuk mendapatkan handel baru. Metode IDirect3DDeviceManager9::ResetDevice membatalkan semua handel perangkat terbuka.
Jika fBlockTRUE, metode ini berpotensi kebuntuan. Misalnya, akan mengalami kebuntuan jika utas memanggil LockDevice lalu menunggu di utas lain yang memanggil LockDevice. Ini juga akan mengalami kebuntuan jika utas memanggil LockDevice dua kali tanpa memanggil UnlockDevice di antaranya .
Contoh
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;
}
Persyaratan
Klien minimum yang didukung | Windows Vista [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2008 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | dxva2api.h |