Condividi tramite


Funzione SleepConditionVariableCS (synchapi.h)

Dorme nella variabile di condizione specificata e rilascia la sezione critica specificata come operazione atomica.

Sintassi

BOOL SleepConditionVariableCS(
  [in, out] PCONDITION_VARIABLE ConditionVariable,
  [in, out] PCRITICAL_SECTION   CriticalSection,
  [in]      DWORD               dwMilliseconds
);

Parametri

[in, out] ConditionVariable

Puntatore alla variabile di condizione. Questa variabile deve essere inizializzata usando la funzione InitializeConditionVariable .

[in, out] CriticalSection

Puntatore all'oggetto sezione critica. Questa sezione critica deve essere immessa esattamente una volta dal chiamante al momento in cui Viene chiamato SleepConditionVariableCS .

[in] dwMilliseconds

Intervallo di timeout, in millisecondi. Se l'intervallo di timeout trascorso, la funzione acquisisce nuovamente la sezione critica e restituisce zero. Se dwMilliseconds è zero, la funzione verifica gli stati degli oggetti specificati e restituisce immediatamente. Se dwMilliseconds è INFINITE, l'intervallo di timeout della funzione non scade mai. Per altre informazioni, vedere la sezione Osservazioni.

Valore restituito

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

Se la funzione ha esito negativo o l'intervallo di timeout trascorso, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError. I codici di errore possibili includono ERROR_TIMEOUT, che indica che l'intervallo di timeout è trascorso prima che un altro thread abbia tentato di riattivare il thread in sospensione.

Commenti

Un thread che sta dormendo su una variabile di condizione può essere interrotto prima che l'intervallo di timeout specificato sia trascorso usando la funzione WakeConditionVariable o WakeAllConditionVariable. In questo caso, il thread viene riattivato al termine dell'elaborazione della riattivazione e non al termine dell'intervallo di timeout. Dopo che il thread viene interrotto, acquisisce nuovamente la sezione critica rilasciata quando il thread ha immesso lo stato di sospensione.

Le variabili di condizione sono soggette a riattivazioni spurie (quelle non associate a una riattivazione esplicita) e le riattivazioni rubate (un altro thread riesce a essere eseguito prima del thread woken). Pertanto, è necessario ricontrollare un predicato (in genere in un while ciclo) dopo che un'operazione di sospensione restituisce.

Esempio

Per un esempio che usa questa funzione, vedere Uso di variabili condizione.

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 (includere Windows.h in Windows 7, Windows Server 2008 Windows Server 2008 R2)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

Variabili di condizione

Funzioni di sincronizzazione

API Vertdll disponibili nelle enclave VBS