Função InitOnceExecuteOnce (synchapi.h)
Quando vários threads chamam InitOnceExecuteOnce passando o mesmo bloco de inicialização única, apenas um thread executará a função de retorno de chamada especificada por InitFn. Os threads restantes serão bloqueados até que a função de retorno de chamada seja concluída. Se a função de retorno de chamada retornar TRUE para indicar êxito, InitOnceExecuteOnce retornará TRUE de volta para todos os chamadores ao mesmo tempo. Se, no entanto, o retorno de chamada retornar FALSE para indicar falha, InitOnceExecuteOnce retornará FALSE apenas para o thread único que executou a função de retorno de chamada. Ao mesmo tempo, um dos threads bloqueados restantes desbloqueará e executará o InitFn mais uma vez. Assim, em um cenário em que InitFn pode falhar intermitentemente e novas tentativas são desejadas, todos os threads devem continuar chamando InitOnceExecuteOnce até que TRUE seja retornado.
Sintaxe
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
Um ponteiro para a estrutura de inicialização única.
[in] InitFn
Um ponteiro para uma função InitOnceCallback definida pelo aplicativo.
[in, optional] Parameter
Um parâmetro a ser passado para a função de retorno de chamada.
[in, out, optional] Context
Um parâmetro que recebe dados armazenados com a estrutura de inicialização única após o êxito. Os bits de INIT_ONCE_CTX_RESERVED_BITS de baixa ordem dos dados são sempre zero. Se Context apontar para uma estrutura de dados, a estrutura de dados deverá ser alinhada a DWORD. O contexto não deve ser um ponteiro de código no Arm32, pois os ponteiros de código Arm32 sempre têm o bit menos significativo definido, consulte a ABI arm32 para obter detalhes.
Valor retornado
Se a função for bem-sucedida, o valor retornado será diferente de zero.
Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.
Comentários
Essa função é usada para inicialização única síncrona. Para inicialização única assíncrona, use a função InitOnceBeginInitialize com o sinalizador INIT_ONCE_ASYNC .
Somente um thread por vez pode executar a função de retorno de chamada especificada por InitFn. Outros threads que especificam o mesmo bloco de estrutura de inicialização única até que o retorno de chamada seja concluído.
Para compilar um aplicativo que usa essa função, defina _WIN32_WINNT como 0x0600 ou posterior. Para obter mais informações, consulte Usando os cabeçalhos do Windows.
Exemplos
Para obter um exemplo que usa essa função, consulte Usando One-Time Inicialização.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows Vista [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | synchapi.h (inclua Windows.h no Windows 7, Windows Server 2008 Windows Server 2008 R2) |
Biblioteca | Kernel32.lib |
DLL | Kernel32.dll |