Fonction veille (synchapi.h)

Suspend l’exécution du thread actif jusqu’à ce que l’intervalle de délai d’attente s’écoule.

Pour entrer un état d’attente pouvant être alerté, utilisez la fonction SleepEx .

Syntaxe

void Sleep(
  [in] DWORD dwMilliseconds
);

Paramètres

[in] dwMilliseconds

Intervalle de temps pendant lequel l’exécution doit être suspendue, en millisecondes.

La valeur zéro fait que le thread abandonne le reste de sa tranche de temps à tout autre thread prêt à s’exécuter. S’il n’y a pas d’autres threads prêts à s’exécuter, la fonction retourne immédiatement et le thread continue son exécution. Windows XP : La valeur zéro oblige le thread à abandonner le reste de sa tranche de temps à tout autre thread de priorité égale prêt à s’exécuter. S’il n’existe aucun autre thread de priorité égale prêt à s’exécuter, la fonction retourne immédiatement et le thread continue son exécution. Ce comportement a changé à partir de Windows Server 2003.

La valeur INFINITE indique que la suspension ne doit pas expirer.

Valeur de retour

None

Remarques

Cette fonction fait qu’un thread abandonne le reste de sa tranche de temps et devient inexécutable pendant un intervalle basé sur la valeur de dwMillisecondes. L’horloge système « coche » à un rythme constant. Si dwMillisecondes est inférieur à la résolution de l’horloge système, le thread peut être en veille inférieure à la durée spécifiée. Si dwMillisecondes est supérieur à une tique, mais inférieur à deux, l’attente peut être comprise entre une et deux tiques, et ainsi de suite. Pour augmenter la précision de l’intervalle de veille, appelez la fonction timeGetDevCaps pour déterminer la résolution minimale du minuteur prise en charge et la fonction timeBeginPeriod pour définir la résolution du minuteur à son minimum. Soyez prudent lorsque vous appelez timeBeginPeriod, car les appels fréquents peuvent affecter considérablement l’horloge du système, l’utilisation de l’alimentation du système et le planificateur. Si vous appelez timeBeginPeriod, appelez-la une fois plus tôt dans l’application et veillez à appeler la fonction timeEndPeriod à la toute fin de l’application.

Une fois l’intervalle de veille passé, le thread est prêt à s’exécuter. Si vous spécifiez 0 millisecondes, le thread abandonne le reste de sa tranche de temps, mais reste prêt. Notez qu’il n’est pas garanti qu’un thread prêt s’exécute immédiatement. Par conséquent, le thread ne peut s’exécuter qu’après l’expiration de l’intervalle de veille. Pour plus d’informations, consultez Planification des priorités.

Soyez prudent lorsque vous utilisez veille dans les scénarios suivants :

  • Code qui crée directement ou indirectement des fenêtres (par exemple, DDE et COM CoInitialize). Si un thread crée des fenêtres, il doit traiter les messages. Les diffusions de messages sont envoyées à toutes les fenêtres du système. Si vous avez un thread qui utilise la veille avec un délai infini, le système s’interblocage.
  • Threads qui sont sous contrôle d’accès concurrentiel. Par exemple, un port d’achèvement d’E/S ou un pool de threads limite le nombre de threads associés qui peuvent s’exécuter. Si le nombre maximal de threads est déjà en cours d’exécution, aucun thread associé supplémentaire ne peut s’exécuter tant qu’un thread en cours d’exécution n’est pas terminé. Si un thread utilise veille avec un intervalle de zéro pour attendre que l’un des threads associés supplémentaires effectue un travail, le processus peut se bloquer.
Pour ces scénarios, utilisez MsgWaitForMultipleObjects ou MsgWaitForMultipleObjectsEx au lieu de Veille.

Windows Phone 8.1 : cette fonction est prise en charge pour les applications du Store Windows Phone Windows Phone 8.1 et versions ultérieures.

Windows 8.1 et Windows Server 2012 R2 : cette fonction est prise en charge pour les applications du Windows Store sur Windows 8.1, Windows Server 2012 R2 et versions ultérieures.

Exemples

Pour obtenir un exemple, consultez Utilisation du stockage local de threads.

Configuration requise

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

Voir aussi

MsgWaitForMultipleObjects

MsgWaitForMultipleObjectsEx

Fonctions de processus et de thread

SleepEx

Suspension de l’exécution de thread

Threads

WaitOnAddress