Función InitOnceExecuteOnce (synchapi.h)

Cuando varios subprocesos llaman a InitOnceExecuteOnce pasando el mismo bloque de inicialización único, solo un subproceso ejecutará la función de devolución de llamada especificada por InitFn. Los subprocesos restantes se bloquearán hasta que se complete la función de devolución de llamada. Si la función de devolución de llamada devuelve TRUE para indicar que se ha realizado correctamente, InitOnceExecuteOnce devolverá TRUE a todos los autores de llamada a la vez. Sin embargo, si la devolución de llamada devuelve FALSE para indicar un error, InitOnceExecuteOnce Devolverá FALSE solo al único subproceso que ejecutó la función de devolución de llamada. Al mismo tiempo, uno de los subprocesos bloqueados restantes desbloqueará y ejecutará InitFn una vez más. Por lo tanto, en un escenario en el que InitFn puede producir un error intermitente y se desean reintentos, todos los subprocesos deben seguir llamando a InitOnceExecuteOnce hasta que se devuelva TRUE .

Sintaxis

BOOL InitOnceExecuteOnce(
  [in, out]           PINIT_ONCE    InitOnce,
  [in]                PINIT_ONCE_FN InitFn,
  [in, optional]      PVOID         Parameter,
  [in, out, optional] LPVOID        *Context
);

Parámetros

[in, out] InitOnce

Puntero a la estructura de inicialización única.

[in] InitFn

Puntero a una función InitOnceCallback definida por la aplicación.

[in, optional] Parameter

Parámetro que se va a pasar a la función de devolución de llamada.

[in, out, optional] Context

Parámetro que recibe los datos almacenados con la estructura de inicialización única cuando se realiza correctamente. Los bits de INIT_ONCE_CTX_RESERVED_BITS de orden bajo de los datos siempre son cero. Si Context apunta a una estructura de datos, la estructura de datos debe estar alineada con DWORD. El contexto no debe ser un puntero de código en Arm32, ya que los punteros de código Arm32 siempre tienen el bit menos significativo establecido, consulte la ABI de Arm32 para obtener más información.

Valor devuelto

Si la función se realiza correctamente, el valor devuelto es distinto de cero.

Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.

Comentarios

Esta función se usa para la inicialización única sincrónica. Para la inicialización única asincrónica, use la función InitOnceBeginInitialize con la marca INIT_ONCE_ASYNC .

Solo un subproceso a la vez puede ejecutar la función de devolución de llamada especificada por InitFn. Otros subprocesos que especifican el mismo bloque de estructura de inicialización única hasta que finaliza la devolución de llamada.

Para compilar una aplicación que usa esta función, defina _WIN32_WINNT como 0x0600 o posterior. Para obtener más información, vea Usar los encabezados de Windows.

Ejemplos

Para obtener un ejemplo en el que se usa esta función, consulte Using One-Time Initialization (Uso de One-Time inicialización).

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2008 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado synchapi.h (incluye Windows.h en Windows 7, Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
Archivo DLL Kernel32.dll

Vea también

InitOnceCallback

InitOnceInitialize

Inicialización única

Funciones de sincronización