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

发布于 2024-07-08 23:34:08 字数 542 浏览 7 评论 0原文

我想写一个小程序,应该打印类似的内容

测试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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

兮颜 2024-07-15 23:34:08

问题是您的打印被缓冲了。 在睡觉前立即调用 fflush(stdout); 刷新缓冲区

The issue is that your printings are buffered. immediately before sleeping, call fflush(stdout); to flush the buffer

最美不过初阳 2024-07-15 23:34:08

编译器无法重新排序打印和睡眠,因为它们是 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.

段念尘 2024-07-15 23:34:08

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

Just using \n or an endl at the end of the first printf should suffice

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文