Il est pas en fait la fonction de sommeil qui retarde la sortie, c'est la nature tampon du flux de sortie standard. La sortie de 2
est presque certainement également retardée jusqu'à ce que votre programme quitte la ligne principale mais le délai est si petit que vous ne le remarquez pas.
La sortie standard est mise en mémoire tampon si elle peut être détectée comme faisant référence à un périphérique interactif (sinon, elle est entièrement mise en mémoire tampon).
Si vous fflush (stdout)
après chaque appel de sortie que vous voulez voir immédiatement, cela résoudra le problème.
Vous pouvez également utiliser setvbuf
avant d'opérer sur stdout
, pour le mettre à unbuffered et vous n'aurez pas à vous soucier d'ajouter toutes ces fflush
lignes à votre code:
setvbuf (stdout, NULL, _IONBF, BUFSIZ);
Il suffit de garder à l'esprit que peut affecter les performances un peu si vous envoyez la sortie dans un fichier. Gardez également à l'esprit que la prise en charge est définie par l'implémentation et n'est pas garantie par la norme.
section ISO C99 7.19.3/3
est le bit correspondant:
Lorsqu'un flux est unbuffered, les caractères sont destinés à apparaître à partir de la source ou à la destination le plus tôt possible. Sinon, des caractères peuvent être accumulés et transmis à l'environnement hôte ou en provenance de celui-ci en tant que bloc.
Lorsqu'un flux est entièrement mis en tampon, les caractères sont destinés à être transmis vers ou depuis l'environnement hôte en tant que bloc lorsqu'un tampon est rempli.
Lorsqu'un flux est ligne mise en tampon, les caractères sont destinés à être transmis vers ou depuis l'environnement hôte en tant que bloc lorsqu'un caractère de nouvelle ligne est rencontré. En outre, les caractères sont destinés à être transmis en bloc à l'environnement hôte lorsqu'un tampon est rempli, lorsque l'entrée est demandée sur un flux non tamponné ou lorsque l'entrée est demandée sur un flux en ligne tamponné nécessitant la transmission de caractères. de l'environnement hôte.
La prise en charge de ces caractéristiques est définie par l'implémentation et peut être affectée via les fonctions setbuf
et setvbuf
.
Comme je le mentionne ci-dessous, je ne savais pas que c'était la cause du problème. –