目录
1、packaged_task
packaged_task<> 被用来同时存有目标函数及其“成果”。(不理解,请看测试代码)
2、packaged_task的函数
packaged_task pt; 建立一个不带shared state的对象
packaged_task pt(f); 为task f建立一个对象
packaged_task pt(alloc,f); 为task f建立一个对象,使用分配器
packaged_task pt(rv); Move构造函数
pt = rv; Move assignment
swap(pt1,pt2); 两个任务交换
pt1.swap(pt2); 两个任务交换
pt.valid(); 如果pt有个shared state状态就产生true
pt.get_future(); 产生一个future object,用来取回shared state
pt(args); 调用task并令shared state成为ready
pt.make_ready_at_thread_exit(args); 调用task,并且在线程退出时令shared state成为ready
pt.reset(); 为pt建立一个新的shared state
pt.~Packaged_task(); 销毁*this
3、测试代码
#include <iostream>
#include <thread>
#include <future>
using namespace std;
int threadFun(int sum)
{
cout << this_thread::get_id() << endl;
return sum;
}
int main()
{
//建立任务
packaged_task<int(int)> task1; //建立一个不带shared state的对象
packaged_task<int(int)> task2(threadFun);//为task2 f建立一个对象
packaged_task<int(int)> task3(move(task2));//Move构造函数
task1 = move(task3);//Move assignment
//判断是否有个shared state
cout << boolalpha << task1.valid() << endl;
//获取任务返回值
future<int> future1 = task1.get_future();
//开启任务,与建立任务时的函数int(int)格式同步
task1(1);
//调用task,并且在线程退出时令shared state成为ready(有bug)
//task1.make_ready_at_thread_exit(1);
//打印结果
cout << future1.get() <<endl;
//task1.~packaged_task();//销毁*this bug
system("pause");
}
来源:CSDN
作者:Liu_Xiao_Ming
链接:https://blog.csdn.net/Liu_Xiao_Ming/article/details/104166986