Поделиться через


Функция 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

Если функция выполнена успешно, этот параметр указывает текущее состояние инициализации.

Если этот параметр имеет значение TRUE , а dwFlags содержит INIT_ONCE_CHECK_ONLY, инициализация ожидается, а данные контекста недопустимы.

Если этот параметр имеет значение FALSE, инициализация уже завершена и вызывающий объект может получить данные контекста из параметра lpContext .

Если этот параметр имеет значение TRUE и dwFlags не содержит 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 .

Если эта функция выполнена успешно, поток может создать объект синхронизации и указать в параметре lpContext функции InitOnceComplete .

Чтобы скомпилировать приложение, использующее эту функцию, определите _WIN32_WINNT как 0x0600 или более поздней версии. Дополнительные сведения см. в разделе Использование заголовков Windows.

Объект однократной инициализации нельзя переместить или скопировать. Процесс не должен изменять объект инициализации и должен рассматривать его как логически непрозрачный. Для управления объектами одноразовой инициализации используйте только функции одноразовой инициализации.

Примеры

Пример использования этой функции см. в разделе Использование инициализации One-Time.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header synchapi.h (включает Windows.h в Windows 7, Windows Server 2008 Windows Server 2008 R2)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

InitOnceComplete

InitOnceExecuteOnce

Однократная инициализация

Функции синхронизации