Condividi tramite


Funzione SleepConditionVariableSRW (synchapi.h)

Sospendo la variabile di condizione specificata e rilascia il blocco specificato come operazione atomica.

Sintassi

BOOL SleepConditionVariableSRW(
  [in, out] PCONDITION_VARIABLE ConditionVariable,
  [in, out] PSRWLOCK            SRWLock,
  [in]      DWORD               dwMilliseconds,
  [in]      ULONG               Flags
);

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] SRWLock

Puntatore al blocco. Questo blocco deve essere mantenuto nel modo specificato dal parametro Flags .

[in] dwMilliseconds

Intervallo di timeout, espresso in millisecondi. La funzione restituisce se l'intervallo è trascorso. 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.

[in] Flags

Se questo parametro è CONDITION_VARIABLE_LOCKMODE_SHARED, il blocco SRW è in modalità condivisa. In caso contrario, il blocco è in modalità esclusiva.

Valore restituito

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

Se la funzione ha esito negativo, il valore restituito è 0. Per ottenere informazioni estese sull'errore, chiamare GetLastError.

Se il timeout scade, la funzione restituisce FALSE e GetLastError restituisce ERROR_TIMEOUT.

Osservazioni:

Se il blocco viene sbloccato quando viene chiamata questa funzione, il comportamento della funzione non è definito.

Il thread può essere riattivato usando la funzione WakeConditionVariable o WakeAllConditionVariable . Dopo che il thread viene riattivato, acquisisce nuovamente il blocco rilasciato 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.

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

Blocchi di lettura/scrittura slim (SRW)

funzioni di sincronizzazione

API Vertdll disponibili nelle enclave VBS