La commande sleep pour Windows

En fait, elle n’existe pas.

Étant donné qu’il n’existe pas de commande sleep sur Windows, nous pouvons tenter de l’émuler ou trouver des alternatives.

timeout

Windows est livré avec une commande qui s’appelle timeout, située dans le dossier C:\Windows\System32, et qui pourrait faire l’affaire. Par exemple, pour faire une pause de 5 secondes :

timeout /t 5 /nobreak > nul

Cependant, bien que cette commande fonctionnera la plupart du temps, il se peut que cette erreur survienne :

timeout: invalid time interval ‘/t’
Try 'timeout --help' for more information.

Ce problème arrive lorsque Cygwin est installé. Dans ce cas, il s’agira de l’exécutable fourni par Cygwin et non celui de Windows. Ceci est du fait que Cygwin modifie le chemin de recherche des exécutables et prend l’ascendance sur les dossiers du système. Et il s’avère que la version de la commande timeout de Cygwin ne prend pas les mêmes arguments.

Un correctif possible est d’utiliser le chemin complet de l’exécutable :

%systemroot%\system32\timeout.exe /t 5 /nobreak > nul

ping

Il existe une alternative universelle : ping. C’est une astuce vieille comme Windows, mais qu’il fallait connaître :

ping 127.0.0.1 -n 6 > NUL

L’idée, c’est de pinger l’adresse locale N fois pour une pause de N secondes. Comme ping utilise un intervalle de une seconde entre chaque essai, il faut utiliser -n N+1 pour simuler une pause de N secondes. Dans cet exemple, -n 6 permet donc de faire une pause de 5 secondes.

Une Seconde d’Intervalle ?

L’implémentation de ReactOS permet de le vérifier :

ping.c
/* Le premier ping, celui nous obligeant à utiliser N+1 */
Ping();

/* Et la boucle : délai 1 sec + N ping */
i = 1;
while (i < PingCount)
{
    Sleep(1000);
    Ping();

    if (!PingForever)
        i++;
}

🎣 Source

📜 Historique

2024-02-07

Déplacement de l’article depuis le blog.

2020-08-08

Premier jet.