Fungsi InitOnceExecuteOnce (synchapi.h)
Ketika beberapa utas memanggil InitOnceExecuteOnce melewati blok inisialisasi satu kali yang sama, hanya satu utas yang akan menjalankan fungsi panggilan balik yang ditentukan oleh InitFn. Utas yang tersisa akan diblokir hingga fungsi panggilan balik selesai. Jika fungsi panggilan balik mengembalikan TRUE untuk menunjukkan keberhasilan, InitOnceExecuteOnce akan mengembalikan TRUE kembali ke semua pemanggil sekaligus. Namun, jika panggilan balik mengembalikan FALSE untuk menunjukkan kegagalan, InitOnceExecuteOnce akan mengembalikan FALSE hanya ke satu utas yang menjalankan fungsi panggilan balik. Pada saat yang sama, salah satu utas yang diblokir yang tersisa akan membuka blokir dan menjalankan InitFn sekali lagi. Dengan demikian, dalam skenario di mana InitFn dapat gagal sewaktu-waktu dan percobaan ulang diinginkan, semua utas harus terus memanggil InitOnceExecuteOnce sampai TRUE dikembalikan.
Sintaks
BOOL InitOnceExecuteOnce(
[in, out] PINIT_ONCE InitOnce,
[in] PINIT_ONCE_FN InitFn,
[in, optional] PVOID Parameter,
[in, out, optional] LPVOID *Context
);
Parameter
[in, out] InitOnce
Penunjuk ke struktur inisialisasi satu kali.
[in] InitFn
Penunjuk ke fungsi InitOnceCallback yang ditentukan aplikasi.
[in, optional] Parameter
Parameter yang akan diteruskan ke fungsi panggilan balik.
[in, out, optional] Context
Parameter yang menerima data yang disimpan dengan struktur inisialisasi satu kali setelah berhasil. Bit INIT_ONCE_CTX_RESERVED_BITS data berurutan rendah selalu nol. Jika Konteks menunjuk ke struktur data, struktur data harus selaras dengan DWORD. Konteks tidak boleh menjadi penunjuk kode di Arm32, karena penunjuk kode Arm32 selalu memiliki set bit yang paling tidak signifikan, lihat ABI Arm32 untuk detailnya.
Nilai kembali
Jika fungsi berhasil, nilai yang dikembalikan bukan nol.
Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.
Keterangan
Fungsi ini digunakan untuk inisialisasi satu kali yang sinkron. Untuk inisialisasi satu kali asinkron, gunakan fungsi InitOnceBeginitialize dengan bendera INIT_ONCE_ASYNC .
Hanya satu utas pada satu waktu yang dapat menjalankan fungsi panggilan balik yang ditentukan oleh InitFn. Utas lain yang menentukan blok struktur inisialisasi satu kali yang sama hingga panggilan balik selesai.
Untuk mengkompilasi aplikasi yang menggunakan fungsi ini, tentukan _WIN32_WINNT sebagai 0x0600 atau yang lebih baru. Untuk informasi selengkapnya, lihat Menggunakan Header Windows.
Contoh
Untuk contoh yang menggunakan fungsi ini, lihat Menggunakan Inisialisasi One-Time.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows Vista [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2008 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | synchapi.h (termasuk Windows.h pada Windows 7, Windows Server 2008 Windows Server 2008 R2) |
Pustaka | Kernel32.lib |
DLL | Kernel32.dll |
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