一百昏的小白 2024-02-23 11:23 采纳率: 14.3%
浏览 4

std::future 线程问题

使用std::future::wait()程序正常,使用std::future::get()崩溃

img

  • 写回答

4条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-02-23 14:09
    关注

    【相关推荐】



    • 你看下这篇博客吧, 应该有用👉 :关于std::future成员函数wait_for()
    • 除此之外, 这篇博客: C++11多线程:future头文件中的 7)std::future::wait_for 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      在这里插入图片描述
      和std::future::wait基本相同,只是加了时间段(rel_time)限制。

      • 因共享状态就绪返回,同std::future::wait。
      • 因超时返回,无作为,不提供同步。

      若未就绪的共享状态具有推迟功能(例如以 launch::deferred 模式调用async返回的future),函数不阻塞线程,而是直接返回 future_status::deferred

      future_status
      在这里插入图片描述
      示例:

      // future::wait_for
      #include <iostream>       // std::cout
      #include <future>         // std::async, std::future
      #include <chrono>         // std::chrono::milliseconds
      
      // a non-optimized way of checking for prime numbers:
      bool is_prime (int x) {
        for (int i=2; i<x; ++i) if (x%i==0) return false;
        return true;
      }
      
      int main ()
      {
        // call function asynchronously:
        std::future<bool> fut = std::async (is_prime,700020007); 
      
        // do something while waiting for function to set future:
        std::cout << "checking, please wait";
        std::chrono::milliseconds span (100);
        while (fut.wait_for(span)==std::future_status::timeout)
          std::cout << '.';
      
        bool x = fut.get();
      
        std::cout << "\n700020007 " << (x?"is":"is not") << " prime.\n";
      
        return 0;
      }
      

      输出(时间不尽相同):

      checking, please wait..........................................
      700020007 is prime.
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 2月23日

悬赏问题

  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线