initOnceBeginInitialize 函数 (synchapi.h)

开始一次性初始化。

语法

BOOL InitOnceBeginInitialize(
  [in, out]       LPINIT_ONCE lpInitOnce,
  [in]            DWORD       dwFlags,
  [out]           PBOOL       fPending,
  [out, optional] LPVOID      *lpContext
);

参数

[in, out] lpInitOnce

指向一次性初始化结构的指针。

[in] dwFlags

此参数的值可以是 0,也可以是以下一个或多个标志。

含义
INIT_ONCE_ASYNC
0x00000002UL
允许并行执行多次初始化尝试。 如果使用此标志,则对此函数的后续调用将失败,除非还指定了此标志。
INIT_ONCE_CHECK_ONLY
0x00000001UL
此函数调用不会开始初始化。 返回值指示初始化是否已完成。 如果函数返回 TRUE,则 lpContext 参数将接收数据。

[out] fPending

如果函数成功,则此参数指示当前初始化状态。

如果此参数为 TRUEdwFlags 包含 INIT_ONCE_CHECK_ONLY,则初始化处于挂起状态,并且上下文数据无效。

如果此参数为 FALSE,则初始化已完成,调用方可以从 lpContext 参数检索上下文数据。

如果此参数为 TRUEdwFlags 不包含 INIT_ONCE_CHECK_ONLY,则表示初始化已启动,调用方可以执行初始化任务。

[out, optional] lpContext

一个可选参数,在成功时接收使用一次性初始化结构存储的数据。 数据的低位 INIT_ONCE_CTX_RESERVED_BITS 位始终为零。

返回值

如果未指定 INIT_ONCE_CHECK_ONLY 并且函数成功,则返回值为 TRUE

如果指定 了INIT_ONCE_CHECK_ONLY 并且初始化已完成,则返回值为 TRUE

否则,返回值为 FALSE

要获得更多的错误信息,请调用 GetLastError。

注解

此函数可用于同步或异步一次性初始化。 对于异步一次性初始化,请使用 INIT_ONCE_ASYNC 标志。 若要指定要在同步一次性初始化期间执行的回调函数,请参阅 InitOnceExecuteOnce 函数。

如果此函数成功,线程可以创建同步对象并在 InitOnceComplete 函数的 lpContext 参数中指定 。

若要编译使用此函数的应用程序, 请将_WIN32_WINNT 定义为 0x0600 或更高版本。 有关详细信息,请参阅 使用 Windows 标头

无法移动或复制一次性初始化对象。 进程不得修改初始化对象,而必须将其视为逻辑上不透明。 仅使用一次性初始化函数来管理一次性初始化对象。

示例

有关使用此函数的示例,请参阅 Using One-Time Initialization

要求

要求
最低受支持的客户端 Windows Vista [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2008 [桌面应用 | UWP 应用]
目标平台 Windows
标头 synchapi.h (包括 Windows 7 上的 Windows.h、Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

InitOnceComplete

InitOnceExecuteOnce

一次性初始化

同步函数