this_thread::sleep_for早点睡

this_thread::sleep_for sleeps early

我正在尝试做一件非常简单的事情(但花了几个小时没有结果):打印一行,睡一会儿,打印第二行。我希望下面的代码能够做到这一点,但是,它首先休眠然后同时打印两行!谁能看到我在这里遗漏了什么?

这是完整的代码:

#include<thread>
#include<chrono>

int main() {
    printf("%s","Wait.\n");
    std::this_thread::sleep_for(std::chrono::seconds(3));
    printf("%s","Thank you for waiting.");
}

计算机信息:Mac 10.14.16,编辑:CLion

printf 不一定刷新缓冲区,这就是为什么在线程从睡眠中恢复之前看不到它的原因(它这样做是因为它注意到线程处于非活动状态)。要强制刷新,请在调用线程睡眠之前添加 fflush(stdout);