C++多线程编程packaged_task类
2019-08-04 15:38
1641 查看
文章目录
1、头文件
#include <future>
2、原理简介
std::packaged_task它包装了一个可调用的目标(如function,lambda expression,bind expression,or another function object),以便异步调用,它和promise在某种程度上有点像,promise保存了一个共享状态的值,而packaged_task保存的是一个函数
3、get_future函数
获取与共享状态相关联的std::future对象。在调用该函数之后,两个对象共享相同的共享状态,具体解释如下:std::packaged_task对象是异步Provider,它在某一时刻通过调用被包装的任务来设置共享状态的值。std::future对象是一个异步返回对象,通过它可以获得共享状态的值,当然必要的时候需要等待共享状态标志变为ready
4、举例
#include<iostream> #include<future> #include<thread> using namespace std; using namespace std::this_thread; using namespace std::chrono; int work(int a, int b) { //处理费时操作 cout << "开始计算!" << endl; sleep_for(seconds(5)); cout << "结束计算!" << endl; return a + b; } int main() { //packaged_task包装了一个可调用的目标 packaged_task<int(int, int)> pack(work ); future<int> result = pack.get_future();//获取packaged_task内部的future thread t1( move( pack) ,123,456);//将packaged_task给线程执行 t1.detach(); int sum = result.get(); cout << "获取结果:" << sum << endl; return 0; }
相关文章推荐
- C++并发实战13:std::future、std::async、std::promise、std::packaged_task
- C++ task.h
- 关于Windows用Task Scheduling执行C++ exe文件
- C++ Task 的实现(lambda 是个好东西)
- c++多线程基础5(future,async,packaged_task,promise)
- C++並發練習 筆記(一)STL<future>中的packaged_task
- Error:Execution failed for task ':app:compileDebugNdk'. > Error: Your project contains C++ files but
- 【windows8开发】异步编程 之Concurrency::task(C++)
- 【windows8开发】异步编程入门篇之 Concurrency::task(C++)
- C++ 异步编程——task类(for VS11) 三
- 面对对象程序设计_task2_C++视频教程
- C++ async task
- Concurrency::task(C++)
- C++ create_task详解
- 用cpptask for ant 构建C++程序
- CTaskDialog 与Visual Studio 2010 C++
- C++ 学习重点
- C/C++要点全掌握(三)——const
- 安装vs2008 sp1后程序出错--VC2008中 “Debug\Ckeshe.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
- 虚方法 - C++快速入门23