Condividi tramite


Funzione InitOnceExecuteOnce (synchapi.h)

Quando più thread chiamano InitOnceExecuteOnce passando lo stesso blocco di inizializzazione monouso, solo un thread eseguirà la funzione di callback specificata da InitFn. I thread rimanenti verranno bloccati fino al completamento della funzione di callback. Se la funzione di callback restituisce TRUE per indicare l'esito positivo, InitOnceExecuteOnce restituirà TRUE a tutti i chiamanti contemporaneamente. Se, tuttavia, il callback restituisce FALSE per indicare un errore, InitOnceExecuteOnce restituirà FALSE solo al singolo thread che ha eseguito la funzione di callback. Allo stesso tempo, uno dei thread bloccati rimanenti sbloccherà ed eseguirà nuovamente InitFn . Pertanto, in uno scenario in cui InitFn può avere esito negativo in modo intermittente e sono desiderati nuovi tentativi, tutti i thread devono continuare a chiamare InitOnceExecuteOnce finché non viene restituito TRUE .

Sintassi

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

Parametri

[in, out] InitOnce

Puntatore alla struttura di inizializzazione monouso.

[in] InitFn

Puntatore a una funzione InitOnceCallback definita dall'applicazione.

[in, optional] Parameter

Parametro da passare alla funzione di callback.

[in, out, optional] Context

Parametro che riceve i dati archiviati con la struttura di inizializzazione una tantum in caso di esito positivo. I bit INIT_ONCE_CTX_RESERVED_BITS di ordine basso dei dati sono sempre zero. Se Context punta a una struttura di dati, la struttura dei dati deve essere allineata con DWORD. Il contesto non deve essere un puntatore al codice in Arm32, perché i puntatori di codice Arm32 hanno sempre il bit meno significativo impostato, vedere Arm32 ABI per informazioni dettagliate.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

Questa funzione viene usata per l'inizializzazione una tantum sincrona. Per l'inizializzazione occasionale asincrona, usare la funzione InitOnceBeginInitialize con il flag INIT_ONCE_ASYNC .

Solo un thread alla volta può eseguire la funzione di callback specificata da InitFn. Altri thread che specificano lo stesso blocco di struttura di inizializzazione una tantum fino al termine del callback.

Per compilare un'applicazione che usa questa funzione, definire _WIN32_WINNT come 0x0600 o versione successiva. Per altre informazioni, vedere Uso delle intestazioni di Windows.

Esempio

Per un esempio che usa questa funzione, vedere Using One-Time Initialization .For an example that using this function, see Using One-Time Initialization.

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2008 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione synchapi.h (include Windows.h in Windows 7, Windows Server 2008 Windows Server 2008 R2)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

InitOnceCallback

InitOnceInitialize

Inizializzazione una tantum

Funzioni di sincronizzazione