initOnceExecuteOnce 函式 (synchapi.h)
當多個線程呼叫 InitOnceExecuteOnce 傳遞相同的一次性初始化區塊時,只有一個線程會執行 InitFn 指定的回呼函式。 其餘的線程將會封鎖,直到回呼函式完成為止。 如果回呼函式傳回 TRUE 表示成功,InitOnceExecuteOnce 會一次傳回 TRUE 給所有呼叫端。 不過,如果回呼傳回 FALSE 表示失敗,InitOnceExecuteOnce 只會傳回 FALSE 給執行回呼函式的單一線程。 同時,其餘其中一個封鎖的線程將會解除封鎖並再次執行 InitFn 。 因此,在 InitFn 間歇性失敗且需要重試的情況下,所有線程都應該繼續呼叫 InitOnceExecuteOnce,直到 傳回 TRUE 為止。
語法
BOOL InitOnceExecuteOnce(
[in, out] PINIT_ONCE InitOnce,
[in] PINIT_ONCE_FN InitFn,
[in, optional] PVOID Parameter,
[in, out, optional] LPVOID *Context
);
參數
[in, out] InitOnce
單次初始化結構的指標。
[in] InitFn
應用程式定義 InitOnceCallback 函式的指標。
[in, optional] Parameter
要傳遞至回調函式的參數。
[in, out, optional] Context
參數,會在成功時接收以一次性初始化結構儲存的數據。 數據的低順序 INIT_ONCE_CTX_RESERVED_BITS 位一律為零。 如果 Context 指向數據結構,則數據結構必須對齊 DWORD。 內容 不得為 Arm32 上的程式碼指標,因為 Arm32 程式代碼指標一律設定最小有效位,如需詳細資訊,請參閱 Arm32 ABI 。
傳回值
如果函式成功,則傳回非零的值。
如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
此函式用於同步單次初始化。 若要進行異步單次初始化,請使用 InitOnceBeginInitialize 函式搭配 INIT_ONCE_ASYNC 旗標。
一次只能執行一個線程,才能執行 InitFn 指定的回呼函式。 其他線程會指定相同的一次性初始化結構區塊,直到回呼完成為止。
若要編譯使用此函式的應用程式,請將 _WIN32_WINNT 定義為0x0600或更新版本。 如需詳細資訊,請參閱 使用 Windows 標頭。
範例
如需使用此函式的範例,請參閱 使用 One-Time 初始化。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2008 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | synchapi.h (包括 Windows 7 上的 Windows.h、Windows Server 2008 Windows Server 2008 R2) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |