Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Veille sur la variable de condition spécifiée et libère la section critique spécifiée en tant qu’opération atomique.
Syntaxe
BOOL SleepConditionVariableCS(
[in, out] PCONDITION_VARIABLE ConditionVariable,
[in, out] PCRITICAL_SECTION CriticalSection,
[in] DWORD dwMilliseconds
);
Paramètres
[in, out] ConditionVariable
Pointeur vers la variable de condition. Cette variable doit être initialisée en appelant InitializeConditionVariable (pour initialiser la structure dynamiquement) ou affecter la constante CONDITION_VARIABLE_INIT à la variable de structure (pour initialiser la structure statiquement).
[in, out] CriticalSection
Pointeur vers l’objet de section critique. Cette section critique doit être entrée exactement une fois par l’appelant au moment où SleepConditionVariableCS est appelé.
[in] dwMilliseconds
Intervalle de délai d’attente, en millisecondes. Si l’intervalle de délai d’attente s’écoule, la fonction acquiert à nouveau la section critique et retourne zéro. Si dwMilliseconds est égal à zéro, la fonction teste les états des objets spécifiés et retourne immédiatement. Si dwMilliseconds est INFINITE, l’intervalle de délai d’attente de la fonction n’est jamais écoulé. Pour plus d'informations, consultez la section Notes.
Valeur retournée
Si la fonction réussit, la valeur de retour est différente de zéro.
Si la fonction échoue ou que l’intervalle de délai d’attente s’écoule, la valeur de retour est égale à zéro. Pour obtenir des informations d’erreur étendues, appelez GetLastError. Les codes d’erreur possibles incluent ERROR_TIMEOUT, ce qui indique que l’intervalle de délai d’attente s’est écoulé avant qu’un autre thread ait tenté de réveiller le thread en veille.
Remarques
Un thread en veille sur une variable de condition peut être réveillé avant que l’intervalle de délai d’attente spécifié ne soit écoulé à l’aide de la fonction WakeConditionVariable ou WakeAllConditionVariable . Dans ce cas, le thread se réveille lorsque le traitement du réveil est terminé, et non lorsque son intervalle de délai d’attente s’écoule. Une fois le thread réveillé, il acquiert à nouveau la section critique qu’il a publiée lorsque le thread est entré dans l’état de veille.
Les variables de condition sont sujettes à de fausses sorties de veille (celles qui ne sont pas associées à un éveil explicite) et à des wakeups volés (un autre thread parvient à s’exécuter avant le thread réveillé). Par conséquent, vous devez revérifier un prédicat (généralement dans une while boucle) après une opération de veille.
Examples
Pour obtenir un exemple qui utilise cette fonction, consultez Utilisation des variables de condition.
Spécifications
| Requirement | Valeur |
|---|---|
| Client minimum requis | Windows Vista [applications de bureau | Applications UWP] |
| Serveur minimal pris en charge | Windows Server 2008 [applications de bureau | Applications UWP] |
| plateforme cible | Fenêtres |
| Header | synchapi.h (inclure Windows.h sur Windows 7, Windows Server 2008 Windows Server 2008 R2) |
| Library | Kernel32.lib |
| DLL | Kernel32.dll |