Quel est le #include approprié pour la fonction 'sleep' en C?

124

J'utilise le livre Objective-C Programming de Big Nerd Ranch, et cela commence par nous faire écrire en C dans les premiers chapitres. Dans l'un de mes programmes qu'il me fait créer, j'utilise la fonction de sommeil. Dans le livre, il m'a dit de mettre #include <stdlib.h>sous la #include <stdio.h>partie. Ceci est censé éliminer l'avertissement qui dit "La déclaration implicite de la fonction 'sleep' n'est pas valide en C99". Mais pour une raison quelconque après avoir mis #include <stdlib.h>, l'avertissement ne disparaît pas .. Ce problème n'empêche pas le programme de bien fonctionner, mais j'étais juste curieux de savoir sur quoi #includeje devais l'utiliser!

trludt
la source
3
plus un pour avoir été assez courageux pour poser la question simple et m'aider.
Mark Ch
1
Si vous utilisez n'importe quel IDE de maire (NetBeans, IntelliJ IDEA, Eclipse). tapez le nom de n'importe quelle fonction, puis Alt + Entrée il importera automatiquement la bibliothèque qui l'a.
T04435
2
@ T04435: Dans les bibliothèques C ne sont pas importées. Le compilateur n'en a pas besoin. L'éditeur de liens peut les lier, mais seulement une fois le compilateur terminé . En C, le compilateur a besoin d'un prototype de fonction pour utiliser une fonction. Les prototypes sont généralement fournis dans des fichiers d' en- tête (.h).
alk

Réponses:

163

La page de manuel de sommeil indique qu'il est déclaré dans <unistd.h>.

Synopsis:

#include <unistd.h>

unsigned int sleep (unsigned int secondes);

Simonc
la source
1
Je n'avais pas! Je vous remercie! ça me dérangeait un peu, parce que le livre disait que <stdlib.h> se débarrasserait de l'avertissement ... bizarre haha ​​@simonc
trludt
1
Serait-il préférable d'utiliser la fonction sleep () ou time () pour créer un délai?
LandonZeKepitelOfGreytBritn
66

sleep est une fonction non standard.

  • Sous UNIX, vous devez inclure <unistd.h>.
  • Sur MS-Windows, Sleepc'est plutôt de <windows.h>.

Dans tous les cas, consultez la documentation.

md5
la source
4
par rapport à la norme C. wrt POSIX, il est
ivotron
Sous UNIX, Sleep est en fait usleep et cela prend des microsecondes (millisecondes * 1000) au lieu de secondes.
Agostino
6
N'utilisez pas usleep: "4.3BSD, POSIX.1-2001. POSIX.1-2001 déclare cette fonction obsolète; utilisez à la place nanosleep (2). POSIX.1-2008 supprime la spécification de usleep ()." linux.die.net/man/3/usleep
Jetski S-type
62

voici ce que j'utilise pour un code multiplateforme:

#ifdef _WIN32
#include <Windows.h>
#else
#include <unistd.h>
#endif

int main()
{
  pollingDelay = 100
  //do stuff

  //sleep:
  #ifdef _WIN32
  Sleep(pollingDelay);
  #else
  usleep(pollingDelay*1000);  /* sleep for 100 milliSeconds */
  #endif

  //do stuff again
  return 0;
}
Romain VIOLLETTE
la source
2
belle solution, utile
HCarrasko
15
usleep () a été supprimé dans POSIX.1-2008. Utilisez nanosleep (). linux.die.net/man/3/usleep
Jetski S-type
13

Car sleep()ça devrait être

#include <unistd.h>
alk
la source
8

sleep(3)est dedans unistd.h, non stdlib.h. Tapez man 3 sleepsur votre ligne de commande pour confirmer votre machine, mais je suppose que vous êtes sur un Mac depuis que vous apprenez Objective-C, et sur un Mac, vous en avez besoin unistd.h.

Carl Norum
la source