c ++,sleep和循环

时间:2010-06-04 03:05:57

标签: c++ linux sleep

好吧,这只是出于好奇,但为什么睡眠功能不能在循环中工作,或者我怎样才能让它在循环中工作?

for(int i = 0; i < 5; i++) { 
     cout << i << endl; 
     sleep(2); 
} 

6 个答案:

答案 0 :(得分:6)

cout被缓冲,意味着其内容并不总是立即写入控制台。尝试在cout.flush()

之前添加sleep(2);

答案 1 :(得分:2)

如果这对您不起作用,您可以尝试以下代码:

#include <iostream>
#include <windows.h>

...

for(int i = 0; i < 5; i++) { 
     cout << i << endl; 
     Sleep(2000); 
} 

答案 2 :(得分:0)

以我的拙见,这个程序应该正常工作。也许你的std :: cout被重定向到其他地方?你没有调用正确的sleep()函数(但没有提供头文件)?还是其他问题?但它应该有用。

答案 3 :(得分:0)

您是否尝试展开循环以查看其行为是否相同?

cout << 1 << endl;
sleep(2);
cout << 2 << endl;
sleep(2);
// Etc.

假设行为方式相同,即使std :: endl应该刷新缓冲区,它确实看起来像dave.kilian有正确的想法,cout没有被刷新,直到程序(推测)终止。

在这种情况下,尝试执行std :: flush并查看是否有帮助 - 您的标准库中可能存在错误(错过功能?)。

要尝试的另一件事是在另一个窗口中使用tail -f观看时将输出重定向到文件。查看重定向时是否发生相同的延迟。

最后尝试使用编译器的优化级别,看看是否会改变结果。

答案 4 :(得分:0)

戴夫已经给你答案了,所以我不会接触到这个。但是,如果它纯粹用于调试或原型代码,您也可以将输出传递给std :: cout的sibling,std :: cerr,它是无缓冲的。这意味着您不需要显式调用flush,也不需要在输出中添加endl。

答案 5 :(得分:-1)

尝试Sleep()而不是sleep()