好的,这只是出于好奇,但是为什么在循环中睡眠函数(sleep function)不起作用,或者我该如何让它在循环中起作用?
for(int i = 0; i < 5; i++) {
cout << i << endl;
sleep(2);
}
好的,这只是出于好奇,但是为什么在循环中睡眠函数(sleep function)不起作用,或者我该如何让它在循环中起作用?
for(int i = 0; i < 5; i++) {
cout << i << endl;
sleep(2);
}
cout
是有缓冲的,这意味着它的内容不会立即写入控制台。尝试在sleep(2);
之前添加cout.flush()
。
如果那个方法对你不起作用,你可以尝试这段代码:
#include <iostream>
#include <windows.h>
...
for(int i = 0; i < 5; i++) {
cout << i << endl;
Sleep(2000);
}
你尝试过展开循环以查看是否表现相同吗?
cout << 1 << endl;
sleep(2);
cout << 2 << endl;
sleep(2);
// Etc.
假设行为相同,即使std::endl应该刷新缓冲区,看起来dave.kilian的想法是正确的,cout直到程序(可能)终止才被刷新。
在这种情况下,请尝试使用std::flush并查看是否有所帮助-您的标准库中可能存在错误(遗漏的功能?)。
另一个尝试的方法是将输出重定向到文件,同时在另一个窗口中使用tail -f
观察。查看重定向时是否发生相同的延迟。
最后,请尝试调整编译器的优化级别,看看是否会改变结果。
试试使用 Sleep() 而不是 sleep()