为什么std :: this_thread :: sleep_for()在MacOS终端中不起作用?

时间:2018-03-28 16:40:32

标签: c++ xcode macos c++11

说明

以此基本代码为例。

#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终端上工作?

1 个答案:

答案 0 :(得分:3)

std::this_thread::sleep_for()在终端中工作得很好,问题是终端上缓存了stdoutstdout可以显式刷新,也可以隐式刷新,如果缓冲区太满或遇到类似新行的字符。

要么自己刷新stdout,要么隐含地添加std::endl

您也可以使用std::cerr << "loop";,因为错误流通常是无缓冲的(尽管C ++标准并不坚持)。