Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 |