sleep()过早地拖延我的程序。我究竟做错了什么?

时间:2008-11-12 18:59:12

标签: c stdout sleep flush

我想写一个应该打印类似

的小程序
  

测试CPU ...完成
  测试RAM ...完成

等等。

我用C编写了以下程序:

printf( "testing RAM...\t\t" );
sleep( sleep_time );
printf( "done\n\n" );

printf( "testing HDD...\t\t" );
sleep( sleep_time );
printf( "done\n\n" );

其中sleep_time为2。

然而,不是首先打印“测试CPU ...”,然后等待,然后打印“完成”,它首先等待,然后打印整行,这不是我想到的。

我认为这与编译器的自动优化有关 无论如何,我该怎么做才能获得所需的输出?

我在OSX 10.5.6上使用XCode 3.1

谢谢你,
巴斯蒂安

3 个答案:

答案 0 :(得分:21)

问题是您的打印是缓冲的。在睡觉前,请拨打fflush(stdout);刷新缓冲区

答案 1 :(得分:2)

编译器无法重新排序打印和睡眠,因为它们是C抽象机器的“外部可观察行为”。

你得到的是stdout缓冲。您可以使用fflush或打印到未缓冲的stderr。

答案 2 :(得分:0)

只需在第一个printf末尾使用\ n或endl就足够了