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
S_OK
Metode berhasil.
DXVA2_E_NEW_VIDEO_DEVICE
Handel perangkat tidak valid.
DXVA2_E_NOT_INITIALIZED
Manajer perangkat Direct3D tidak diinisialisasi. Pemilik perangkat harus memanggil IDirect3DDeviceManager9::ResetDevice.
DXVA2_E_VIDEO_DEVICE_LOCKED
Perangkat terkunci dan fBlockfalse.
E_HANDLE
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

Lihat juga

Manajer Perangkat Direct3D

IDirect3DDeviceManager9