Condividi tramite


Funzione SleepConditionVariableSRW (synchapi.h)

Dorme nella 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 usando la funzione InitializeConditionVariable .

[in, out] SRWLock

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

[in] dwMilliseconds

Intervallo di timeout, 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 informazioni dettagliate sull'errore, chiamare GetLastError.

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

Commenti

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

Il thread può essere woken usando la funzione WakeConditionVariable o WakeAllConditionVariable . Dopo che il thread viene interrotto, 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 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.

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

Blocchi di lettura/writer sottile (SRW)

Funzioni di sincronizzazione

API Vertdll disponibili nelle enclave VBS