Compartilhar via


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

Confira também

InitOnceCallback

InitOnceInitialize

Inicialização única

Funções de sincronização