【问题标题】:this_thread::sleep_for sleeps earlythis_thread::sleep_for 早睡
【发布时间】:2020-10-15 01:13:57
【问题描述】:

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

这是整个代码:

#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

【问题讨论】:

  • 尝试fflush(stdout); 尽管第一个 printf 中的 '\n' 应该已刷新
  • 在我的机器上工作。有或没有fflush。但我不得不添加代码。也许错误不在提供的代码中? minimal reproducible example 可能会有所帮助。使用的编译行也会很有帮助,它将显示如何它是如何编译和链接的。
  • @bolov 仅当设备被确定为交互式时才适用
  • @Eljay @WrathOfTux fflush 在我的情况下工作。看起来它取决于编译器或机器。例如,在 Leetcode 的编辑器中,无论有没有fflush,它都不起作用。在这个editor 上它工作 有或没有fflush
  • @Eljay 几乎是整个代码,无论如何更新了我的问题。

标签: c++ printf sleep


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-10-19
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2013-01-04
    相关资源
    最近更新 更多