sleep() 过早地停止了我的程序。 我究竟做错了什么?
我想写一个小程序,应该打印类似的内容
测试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。
但是,它不是先打印“testing CPU...”,然后等待,然后打印“done”,而是先等待,然后打印整条线,这不完全是我的想法。
我想这与编译器的自动优化有关。
无论如何,我该怎么做才能获得所需的输出?
我在 OSX 10.5.6 上使用 XCode 3.1
谢谢,
巴斯蒂安
I want to write a small program that should print something like
testing CPU... done
testing RAM... done
and so on.
I wrote the following program in 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" );
where sleep_time
is 2.
However, instead of printing "testing CPU..." first, then waiting, then printing "done", it first waits, then prints the whole line, which is not exactly what I had in mind.
I suppose this has something to do with automatic optimization by the compiler.
Anyway, what can I do to get the desired output?
I am using XCode 3.1 on OSX 10.5.6
Thank you,
Bastian
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
问题是您的打印被缓冲了。 在睡觉前立即调用 fflush(stdout); 刷新缓冲区
The issue is that your printings are buffered. immediately before sleeping, call fflush(stdout); to flush the buffer
编译器无法重新排序打印和睡眠,因为它们是 C 抽象机的“外部可观察行为”。
您得到的是由于标准输出缓冲。 您可以使用 fflush 或打印到 stderr,这是不缓冲的。
compiler can not reorder prints and sleeps, for they are "externally observable behavior" of the C abstract machine.
What you get is due to stdout buffering. You can use fflush or print to stderr, which is not buffered.
只需在第一个 printf 的末尾使用 \n 或 endl 就足够了
Just using \n or an endl at the end of the first printf should suffice