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

另請參閱

InitOnceCallback

InitOnceInitialize

一次性初始化

同步處理函式