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 |