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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk