Bagikan melalui


IDXGIKeyedMutex::AcquireSync method (dxgi.h)

Menggunakan kunci, memperoleh akses penyajian eksklusif ke sumber daya bersama.

Sintaks

HRESULT AcquireSync(
  UINT64 Key,
  DWORD  dwMilliseconds
);

Parameter

Key

Jenis: UINT64

Nilai yang menunjukkan perangkat mana yang akan diberikan akses. Metode ini akan berhasil ketika perangkat yang saat ini memiliki permukaan memanggil metode IDXGIKeyedMutex::ReleaseSync menggunakan nilai yang sama. Nilai ini bisa menjadi nilai UINT64 apa pun.

dwMilliseconds

Jenis: DWORD

Interval waktu habis, dalam milidetik. Metode ini akan kembali jika interval berlalu, dan mutex berkun kunci belum dirilis menggunakan Kunci yang ditentukan. Jika nilai ini diatur ke nol, metode AcquireSync akan menguji untuk melihat apakah mutex kunci telah dirilis dan segera kembali. Jika nilai ini diatur ke INFINITE, interval waktu habis tidak akan pernah berlalu.

Menampilkan nilai

Jenis: HRESULT

Kembalikan S_OK jika berhasil.

Jika perangkat pemilik mencoba membuat mutex kunci lain pada sumber daya bersama yang sama, AcquireSync mengembalikan E_FAIL.

AcquireSync juga dapat mengembalikan konstanta DWORD berikut. Oleh karena itu, Anda harus secara eksplisit memeriksa konstanta ini. Jika Anda hanya menggunakan makro BERHASIL pada nilai yang dikembalikan untuk menentukan apakah AcquireSync berhasil, Anda tidak akan menangkap konstanta ini.

  • WAIT_ABANDONED - Permukaan bersama dan mutex bertanda kunci tidak lagi dalam keadaan konsisten. Jika AcquireSync mengembalikan nilai ini, Anda harus merilis dan membuat ulang mutex bertanda kunci dan permukaan bersama.
  • WAIT_TIMEOUT - Interval waktu habis berlalu sebelum kunci yang ditentukan dirilis.

Keterangan

Metode AcquireSync membuat kunci ke permukaan yang dibagikan di antara beberapa perangkat, memungkinkan hanya satu perangkat untuk dirender ke permukaan pada satu waktu.
Metode ini menggunakan kunci untuk menentukan perangkat mana yang saat ini memiliki akses eksklusif ke permukaan.

Saat permukaan dibuat menggunakan nilai D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX enumerasi D3D10_RESOURCE_MISC_FLAG , Anda harus memanggil metode AcquireSync sebelum merender ke permukaan. Anda harus memanggil metode ReleaseSync ketika Anda selesai merender ke permukaan.

Untuk memperoleh referensi ke objek mutex kunci sumber daya bersama, panggil metode QueryInterface sumber daya dan teruskan UUID antarmuka IDXGIKeyedMutex . Untuk informasi selengkapnya tentang memperoleh referensi ini, lihat contoh kode berikut.

Metode AcquireSync menggunakan kunci sebagai berikut, tergantung pada status permukaan:

  • Pada pembuatan awal, permukaan tidak memiliki izin dan perangkat apa pun dapat memanggil metode AcquireSync untuk mendapatkan akses. Untuk perangkat yang tidak memiliki izin, hanya kunci 0 yang akan berhasil. Memanggil metode AcquireSync untuk kunci lain akan mengulur utas CPU panggilan.
  • Jika permukaan dimiliki oleh perangkat saat Anda memanggil metode AcquireSync, utas CPU yang disebut metode AcquireSync akan mengulur hingga perangkat pemilik memanggil metode ReleaseSync menggunakan Kunci yang sama.
  • Jika permukaan tidak berhutang saat Anda memanggil metode AcquireSync (misalnya, perangkat pemilik terakhir telah memanggil metode ReleaseSync ), metode AcquireSync akan berhasil jika Anda menentukan kunci yang sama yang ditentukan ketika metode ReleaseSync terakhir dipanggil. Memanggil metode AcquireSync menggunakan kunci lain akan menyebabkan stall.
  • Ketika perangkat pemilik memanggil metode ReleaseSync dengan kunci tertentu, dan lebih dari satu perangkat menunggu setelah memanggil metode AcquireSync menggunakan kunci yang sama, salah satu perangkat yang menunggu dapat dibangunkan terlebih dahulu. Urutan perangkat terbangun tidak ditentukan.
  • Mutex bertanda kunci tidak mendukung panggilan rekursif ke metode AcquireSync .

Contoh

Memperoleh Keyed Mutex

Contoh kode berikut menunjukkan cara memperoleh kunci ke sumber daya bersama dan cara menentukan kunci saat rilis.


// pDesc has already been set up with texture description.
pDesc.MiscFlags = D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX;

// Create a shared texture resource.
pD3D10DeviceD->CreateTexture2D(pDesc, NULL, pD3D10Texture);

// Acquire a reference to the keyed mutex.
pD3D10Texture->QueryInterface(_uuidof(IDXGIKeyedMutex), pDXGIKeyedMutex);

// Acquire a lock to the resource.
pDXGIKeyedMutex->AcquireSync(0, INFINITE);

// Release the lock and specify a key.
pDXGIKeyedMutex->ReleaseSync(1);
          

Persyaratan

   
Target Platform Windows
Header dxgi.h
Pustaka DXGI.lib

Lihat juga

Antarmuka DXGI

IDXGIKeyedMutex

IDXGIKeyedMutex::ReleaseSync