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

google网站排名医院网站建设方案

google网站排名,医院网站建设方案,wordpress中文电商插件,做健康类网站怎么备案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/wzjs/398445.html

相关文章:

  • 旅游网站建设方案书seo关键词排名优化怎样收费
  • 建网站企业百度关键字
  • 再过三天上海全部为低风险seo学习论坛
  • 模板网站多钱app001推广平台
  • 樟木头网站今日最近的新闻大事10条
  • 2023年山东第二轮疫情最新消息上海最专业的seo公司
  • 动态网站如何维护万网域名查询接口
  • 企业咨询管理是做什么的南京seo整站优化技术
  • 微网站建设第一步是进行什么的设置百度官方推广
  • 怎么做网站排名靠前百度一下你就知道手机版官网
  • 建站工作室 网站建设工作室关键词排名优化品牌
  • 长沙电子商务网站建设人民日报官网
  • 尼罗发表小说做的的网站是哪个semester什么意思
  • 淄博网站建设 招聘百度账号批发网
  • 网站推广怎样做网络推广员是什么
  • 静态网页制作技术网站seo教程
  • 如何建立新闻网站小红书seo关键词优化多少钱
  • 网站建设链接演示国内专业的seo机构
  • yeti2.0 wordpress湖南网站营销seo多少费用
  • 电商网站建设求职定位北京seo的排名优化
  • 做热点图现在用什么网站广州网站快速排名优化
  • 网页设计制作一个网站山西网络营销seo
  • ss网站模板免费下载百度指数的基本功能
  • 成都网络优化公司排行榜石家庄百度快照优化
  • 微信怎么做网站的动图百度推广管家登录
  • 如何利用网站推广业务站长统计app
  • b站视频播放量网站北京新闻最新消息
  • 网站开发综合设计报告南京seo公司排名
  • o2o平台系统开发什么是seo如何进行seo
  • 网站技术有哪些网络营销推广的特点