Fonction SleepConditionVariableSRW (synchapi.h)

Veille sur la variable de condition spécifiée et libère le verrou spécifié en tant qu’opération atomique.

Syntaxe

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

Paramètres

[in, out] ConditionVariable

Pointeur vers la variable de condition. Cette variable doit être initialisée à l’aide de la fonction InitializeConditionVariable .

[in, out] SRWLock

Pointeur vers le verrou. Ce verrou doit être conservé de la manière spécifiée par le paramètre Flags .

[in] dwMilliseconds

Intervalle de délai d’attente, en millisecondes. La fonction retourne si l’intervalle s’écoule. Si dwMillisecondes est égal à zéro, la fonction teste les états des objets spécifiés et retourne immédiatement. Si dwMillisecondes est INFINITE, l’intervalle de délai d’attente de la fonction ne s’écoule jamais.

[in] Flags

Si ce paramètre est CONDITION_VARIABLE_LOCKMODE_SHARED, le verrou SRW est en mode partagé. Sinon, le verrou est en mode exclusif.

Valeur retournée

Si la fonction réussit, la valeur de retour est différente de zéro.

Si la fonction échoue, la valeur de retour est 0. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Si le délai d’expiration expire, la fonction retourne FALSE et GetLastError retourne ERROR_TIMEOUT.

Remarques

Si le verrou est déverrouillé lorsque cette fonction est appelée, le comportement de la fonction n’est pas défini.

Le thread peut être réveillé à l’aide de la fonction WakeConditionVariable ou WakeAllConditionVariable . Une fois le thread réveillé, il récupère à nouveau le verrou qu’il a libéré lorsque le thread est entré en veille.

Les variables de condition sont soumises à des mises en éveil fallacieuses (celles qui ne sont pas associées à une veille explicite) et des mises en éveil volées (un autre thread parvient à s’exécuter avant le thread réveillé). Par conséquent, vous devez vérifier à nouveau un prédicat (généralement dans une boucle) après le while retour d’une opération de mise en veille.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau | applications UWP]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau | applications UWP]
Plateforme cible Windows
En-tête synchapi.h (inclure Windows.h sur Windows 7, Windows Server 2008 Windows Server 2008 R2)
Bibliothèque Kernel32.lib
DLL Kernel32.dll

Voir aussi

Verrous de lecteur/enregistreur minces (SRW)

Fonctions de synchronisation

API Vertdll disponibles dans les enclaves VBS