Condividi tramite


Funzione SleepConditionVariableCS (synchapi.h)

Sospendo la 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 chiamando InitializeConditionVariable (per inizializzare la struttura in modo dinamico) o assegnando la costante CONDITION_VARIABLE_INIT alla variabile di struttura (per inizializzare la struttura in modo statico).

[in, out] CriticalSection

Puntatore all'oggetto sezione critica. Questa sezione critica deve essere immessa esattamente una volta dal chiamante al momento della chiamata a SleepConditionVariableCS .

[in] dwMilliseconds

Intervallo di timeout, espresso in millisecondi. Se l'intervallo di timeout scade, 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 Note.

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 scade, il valore restituito è zero. Per ottenere informazioni estese sull'errore, chiamare GetLastError. I possibili codici di errore includono ERROR_TIMEOUT, che indica che l'intervallo di timeout è trascorso prima che un altro thread abbia tentato di riattivare il thread in sospensione.

Osservazioni:

È possibile riattivare un thread che sta dormendo in una variabile di condizione prima che sia trascorso l'intervallo di timeout specificato usando la funzione WakeConditionVariable o WakeAllConditionVariable . In questo caso, il thread viene riattivato al termine dell'elaborazione della riattivazione e non quando scade l'intervallo di timeout. Dopo che il thread viene riattivato, 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 riattivazioni rubate (un altro thread riesce a essere eseguito prima del thread woken). Pertanto, è consigliabile controllare nuovamente un predicato (in genere in un while ciclo) dopo la restituzione di un'operazione di sospensione.

Esempi

Per un esempio che usa questa funzione, vedere Using Condition Variables.For an example that use this function, see Using Condition Variables.

Requisiti

Requisito Value
Client minimo supportato Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2008 [app desktop | App UWP]
Piattaforma di destinazione Windows
Header synchapi.h (includere Windows.h in Windows 7, Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
DLL Kernel32.dll

Vedere anche

Variabili di condizione

funzioni di sincronizzazione

API Vertdll disponibili nelle enclave VBS