以此基本代码为例。
#include <iostream>
#include <thread>
int main(int argc, const char * argv[]) {
while(true){
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
std::cout << "loop";
}
}
当我在XCode中运行它时,它完全按预期工作。它打印出的每一秒,&#34;循环&#34;。但是,当我在终端中运行它时,没有任何反应。代码似乎是&#34;运行&#34;但没有任何东西被打印到屏幕上。
为什么std::this_thread::sleep_for()
在XCode终端中工作,而不是在标准的MacOS终端上工作?
答案 0 :(得分:3)
std::this_thread::sleep_for()
在终端中工作得很好,问题是终端上缓存了stdout
。 stdout
可以显式刷新,也可以隐式刷新,如果缓冲区太满或遇到类似新行的字符。
要么自己刷新stdout,要么隐含地添加std::endl
。
您也可以使用std::cerr << "loop";
,因为错误流通常是无缓冲的(尽管C ++标准并不坚持)。