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 |