C睡眠功能不工作
从C睡眠功能不工作,c,sleep,unistd.h,C,Sleep,Unistd.h,从unistd.h包含睡眠功能时,程序无限期挂起: #include <stdio.h> #include <unistd.h> int main() { int i; printf("0 "); for(i = 1; i <20; ++i) { sleep(2); printf("%d ", i); } printf("
unistd.h
包含睡眠功能时,程序无限期挂起:
#include <stdio.h>
#include <unistd.h>
int main()
{
int i;
printf("0 ");
for(i = 1; i <20; ++i)
{
sleep(2);
printf("%d ", i);
}
printf("\n");
return 0;
}
#包括
#包括
int main()
{
int i;
printf(“0”);
对于(i=1;i代码没有问题,但请注意,在许多情况下,printf
的输出是缓冲的,这意味着只有在显式调用fflush(stdout)时,输出才会显示在控制台上
,打印一个换行符,或者缓冲区变满。由于直到最后才打印换行符,因此在for循环中40秒内将看不到任何内容(因为打印的内容仍在缓冲区中)。然后,当执行命中printf(“\n”)
,在刷新缓冲区时,所有内容都将立即打印
因此,底线是:调用fflush(stdout)
在调用sleep
以确保输出缓冲区中没有任何内容,或者等待40秒,最终将在一批中获得输出。您是在Windows计算机上吗?如果是,请在程序中包含
,要暂停程序,请编写
Sleep(time_in_milliseconds)
在你的例子中,时间单位应该是2000毫秒
另一方面,如果您使用的是基于UNIX的计算机,代码看起来很好(不需要
)。无限期挂起
意味着它被卡住或不确定,而这不会发生。您的代码在38秒(19*2)后工作正常它将字符串计数从0转储到19。但是我怀疑这就是您希望它执行的操作:
int main()
{
int i;
printf("0 ");
fflush(stdout); // Force the output to be printed
for(i = 1; i <20; ++i)
{
sleep(2);
printf("%d ", i);
fflush(stdout); // Force the output to be printed
}
printf("\n");
return 0;
}
intmain()
{
int i;
printf(“0”);
fflush(stdout);//强制打印输出
对于(i=1;我还注意到printf(“0”)行没有运行,因此这不是睡眠时间的问题()。缓冲?如果用换行符结束打印的字符串会发生什么?编辑:如我所料,38秒的静默,然后打印数字。如果执行fflush(stdio)会发生什么
在每次迭代中?可能会重复@JamesJenkinson-:)它会发生。调试器对此很好,因此您可以看到它正在做一些事情,如果没有这些,只需等待最长时间即可sleep()