【问题标题】:std::this_thread::sleep_for() sleep infinitestd::this_thread::sleep_for() 无限睡眠
【发布时间】:2020-10-19 12:06:41
【问题描述】:

所以我让主线程与其他线程通信,并且在某些时候我希望子线程一次休眠一个,但是当我使用sleep_for 方法并放入 2 秒时,它永远不会停止休眠,但是使用 valgrind 它确实会停止睡眠,没有它就不起作用。 这是我的代码:


            int cookTime = (int)_currPizza->getCookTime() * this->_multiplier;
            printf("cook time %d\n", cookTime);
            // cookTime is 2;
            printf("start cooking\n");
            std::this_thread::sleep_for(std::chrono::seconds(cookTime));
            printf("end cooking\n");

【问题讨论】:

  • 请提供minimal reproducible example,并请说明您是如何知道它无限休眠的
  • 它不打印“结束烹饪\n”这就是我所知道的
  • 尝试在“结束烹饪”printf 之后刷新缓冲的 IO。您可以使用 fflush(stdout) 执行此操作。如果您发布一个简化的完整示例(即我们可以运行的东西,我们不能按原样运行),那么人们可能能够提供更多帮助。

标签: c++ multithreading sleep


【解决方案1】:

如果你想等待创建线程完成工作,你应该在创建者线程中调用thread.join()。

【讨论】:

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