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

大石桥做网站网站开发是什么部门

大石桥做网站,网站开发是什么部门,合肥网站建设公司 推荐,抖音代运营网C11 异步编程(3)— packaged_task packaged_task 是 C11 标准库中引入的一个非常实用的工具,主要用于将可调用对象(如函数、lambda 表达式、函数对象等)封装起来,以便在异步编程中方便地使用。 一、基本概…

C++11 异步编程(3)— packaged_task

packaged_task 是 C++11 标准库中引入的一个非常实用的工具,主要用于将可调用对象(如函数、lambda 表达式、函数对象等)封装起来,以便在异步编程中方便地使用。

一、基本概念

packaged_task 是一个模板类,模板参数是可调用对象的调用签名。它将一个可调用对象封装起来,并且与一个 future 对象关联。当 packaged_task 被调用时,它会执行封装的可调用对象,并将结果存储在与之关联的 future 对象中。这样,调用者可以通过 future 对象获取来异步操作的结果。

二、构造函数

packaged_task 的构造函数用于初始化封装的可调用对象。以下是一些常见的构造方式:

2.1 直接构造

packaged_task<int()> task([](){return 42;})

这里创建另一个task对象,封装了一个返回42的lambda表达式。

2.2 通过移动构造函数

function<int()> f = [](){return 42;};
packaged_task<int()> task(std::move(f));

这里创建了一个function对象,然后通过移动构造函数将其移动到packaged_task对象中。

三、调用和执行

packaged_task 提供了多种方式来调用封装的可调用对象:

3.1直接调用

packaged_task<int()> task([](){return 42;});
future<int> fu =  task.get_future();
task();// 调用封装的可调用对象
cout << fu.get() << endl;

这里通过 task() 直接调用了封装的 lambda 表达式,并通过 future 对象获取了结果。

3.2 通过线程调用

#include <iostream>
#include<thread>
#include<future>
using namespace std;int Add(int a, int b)
{cout << "task is excute" << endl;return a + b;
}int main()
{// 创建一个 packaged_task 对象,封装 add 函数packaged_task<int(int, int)> task(Add);// 获取与 task 关联的 future 对象,用于获取任务结果future<int> future = task.get_future();// 在新线程中执行任务thread th(std::move(task),3,5);// 主线程可以继续执行其他操作std::cout << "Doing other things while the task is running..." << std::endl;// 获取异步任务的结果int nResult = future.get();cout << "the result of Task is = "<< nResult << endl;th.join();std::cout << "Hello World!\n";
}
  • 这里将 packaged_task 移动到线程中执行,线程结束后,可以通过 future 对象获取结果。

四、注意事项

线程安全packaged_task 本身不是线程安全的。如果需要在多线程环境中使用,需要自己进行同步控制。移动语义packaged_task 的对象不能被复制,只能被移动。这是因为它的内部资源(如与之关联的 future 对象)是唯一的,不能被复制。

异常处理:如果封装的可调用对象抛出异常,异常会被存储在与之关联的 future 对象中,可以通过 future 对象的 getwait 方法来获取异常。

五、使用场景

packaged_task 在异步编程中非常有用,尤其是在需要将任务提交到线程池、事件循环或其他异步执行环境中时。它提供了一种方便的方式来封装任务,并且能够通过 future 对象来获取任务的执行结果。

总的来说,packaged_task 是 C++11 引入的一个强大的工具,它简化了异步编程的复杂性,使得开发者能够更加方便地编写异步代码。

http://www.dtcms.com/a/610731.html

相关文章:

  • 职业本科发展路径与规划指南
  • 同一局域网下,外面无法访问本机Java服务(Windows)
  • 网站上的漂浮广告做行程好的网站
  • 生态环评全流程实战:从指数计算到专题制图- 基于最新导则,集成Rstudio、Fragstats、ENVI、Maxent于陆域水域项目案例
  • MaxWell中基本使用原理 完整使用 (第一章)
  • 奉贤网站建设推广地方生活门户网站有哪些
  • Unity 图集的图片切片
  • 郑州注册公司网站wordpress文档模板下载
  • android--studio用sshj,而不是sftp上传和下载文件以及错误提醒
  • Rust的内存安全与实战落地的直观解析
  • 网站建设系统规划怎样在赶集微网站做微招聘信息
  • 写作网站保底和全勤的区别用二级域名做网站对seo
  • 升鲜宝分拣系统 具体实现(一)
  • 具身智能-一文详解视觉-语言-动作(VLA)大模型(3)
  • 多模态学习核心技术与典型场景对照表
  • 3d网站设计7免费crm
  • 常德烟机网站上市公司集团网站建设
  • MySQL -- 库的操作
  • 网站开发文档docwordpress文章和页面
  • 番禺核酸检测点在哪石家庄网站建设seo公司
  • 人力资源网站开发说明书网站没被百度收录
  • 【深度学习新浪潮】算法工程师如何入门芯片硬软件设计工作?
  • JM20329是一款高性能、低功耗的USB桥接芯片,实现串行接口(如SATA、IDE)与USB接口之间的数据转换。
  • 微调模型过程中,发现欠拟合的措施
  • 网站代发怎么做网站建设标语文案
  • Wisdom Lens:开启物联网固件模糊测试新时代
  • 番禺区建设局网站影视公司起名
  • js(BOM)基础:15、Navigator对象、History对象、Location对象、定时(器)调用、demo(定时器实现图形变化动画)
  • 屏幕捕捉工具 (Screen Capture Tool)
  • 分离Hadoop客户端单独使用