当前位置: 首页 > news >正文

C++ packaged_task

   packaged_task 是 C++11 标准库中引入的一个模板类,它用于将可调用对象(如函数、lambda 表达式、函数对象或绑定表达式)包装起来,并允许异步地获取其结果packaged_task 类提供了一种方便的方式来创建任务,这些任务可以被放入线程中执行,而任务的结果可以在需要时通过 future 对象来获取。

  1. 定义任务:首先,你需要定义一个可调用对象,这个对象就是你想要异步执行的任务。

  2. 包装任务:使用 packaged_task 模板类将你的可调用对象包装起来。在包装时,你需要指定返回类型和参数类型,这些类型应该与你的可调用对象相匹配。

  3. 获取 future 对象:通过调用 packaged_task 对象的 get_future() 方法,你可以获取一个 future 对象。这个 future 对象将用于在稍后获取任务的结果。

  4. 执行任务:将 packaged_task 对象传递给一个线程,使其在新线程中执行。

  5. 获取结果:在需要的时候,通过之前获取的 future 对象调用 get() 方法来获取任务的结果。注意,如果任务尚未完成,get() 方法会阻塞,直到任务完成并返回结果。

  6. 注意:被packaged_task 包装的对象,它可以当作一个可调用对象来调用任务执行,但它又不能完全的当作一个函数来使用,他不能想普通函数一样传递给线程使用。我们可以将它封装成为一个指针,传递给线程,然后解引用执行。但如果单纯指向以恶搞对象,存在生命周期的问题。所以我们可以在堆上new对象,用智能指针去管理它的生命周期。

        下面是一段示例:

#include<iostream>
#include<future>
#include<thread>
#include<memory>
#include<string>
#include <chrono>int add(int x, int y)
{std::this_thread::sleep_for(std::chrono::seconds(3));return x + y;
}int main()
{auto ptask = std::make_shared < std::packaged_task<int(int, int)>>(add);std::future<int> fu = ptask->get_future();std::thread thr([ptask]() {(*ptask)(1, 2);});int num = fu.get();std::cout << num;thr.join();return 0;
}

http://www.lryc.cn/news/497375.html

相关文章:

  • 【联表查询】.NET开源 ORM 框架 SqlSugar 系列
  • 嵌入式C编程:宏定义与typedef的深入对比与应用
  • 高级java每日一道面试题-2024年12月03日-JVM篇-什么是Stop The World? 什么是OopMap? 什么是安全点?
  • 【openGauss︱PostgreSQL】openGauss或PostgreSQL查表、索引、序列、权限、函数
  • Dataset用load_dataset读图片和对应的caption的一个坑
  • 【信息系统项目管理师】第7章:项目立项管理 考点梳理
  • 知识库、提示词对大语言模型的影响测试
  • vistat-监控和分析网络状态
  • EasyAnimateV5 视频生成大模型原理详解与模型使用
  • 水稻和拟南芥生命周期中单碱基分辨率的m6A定量分析-文献精读88
  • 学习threejs,使用canvas更新纹理
  • 【笔记2-3】ESP32 bug:PSRAM chip not found or not supported 没有外部PSRAM问题解决
  • 大数据hadoop、spark、flink、kafka发展的过程
  • 设计模式-理论基础
  • 猎板 PCB特殊工艺:铸就电子行业核心竞争力新高度
  • 用于目标检测的集中式特征金字塔
  • 大舍传媒-关于海外媒体宣发的探讨
  • Python从入门到入狱
  • AMEYA360 | 杭晶电子:晶振在AR/VR中的应用
  • RAG评估指南:从检索到生成,全面解析LLM性能评估方法
  • 贪心算法实例-问题分析(C++)
  • Ubuntu20.04 配置虚拟显示器和切回物理显示器
  • HTML 常用标签属性汇总一〈body〉标签
  • Python yield关键字
  • tomcat的Mysql链接字符串问题
  • 聊聊JVM G1(Garbage First)垃圾收集器
  • 【论文复现】隐式神经网络实现低光照图像增强
  • Python知识分享第十九天-网络编程
  • C# 绘制GDI红绿灯控件
  • Centos 8 服务器时间校正