【发布时间】:2015-09-03 20:35:46
【问题描述】:
我正在尝试一些 c++11 代码,并尝试编写一个从 10 开始倒计时的程序,在输出之间休眠。这是我目前所拥有的:
#include <iostream>
using namespace std;
#include <chrono>
#include <thread>
void Sleep(int x)
{
std::this_thread::sleep_for(std::chrono::duration<int>(x));
}
int main()
{
for (int x=10; x>0; x--) {
cout << x << "...";
Sleep(1);
}
cout << " FIRE!!\n";
}
问题是,这段代码等待 10 秒,然后打印所有输出,而不是从 10 开始倒计时。这是怎么回事?我该如何解决?
(顺便说一句,我在运行 Linux Mint 17 和 MacOSX 10.9 的计算机上尝试过这个,两次都得到了相同的结果)
【问题讨论】:
-
您的 cout 已“缓存”(不知道如何更正确地调用它)。在睡眠前调用 std::cout.flush()
-
@Creris 通常的词是“缓冲”。
-
@T.C.谢谢,现在脑子已经半睡半醒了,所以想不出那个词
-
I/O 不会自动刷新,因为这可能很昂贵(就性能而言)......