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

InitOnceCallback

InitOnceInitialize

Inisialisasi Satu Kali

Fungsi Sinkronisasi