future, packaged_task promise

来源:互联网 发布:骨关节功能解剖学知乎 编辑:程序博客网 时间:2024/05/22 09:49
#include "stdafx.h"#include <iostream>#include <vector>#include <future>//future 类型#include <algorithm>#include <numeric>//accumulatetemplate <typename RAIter>int sum(RAIter beg, RAIter end){auto len = end - beg;if (len < 1000)return std::accumulate(beg, end, 0);RAIter mid = beg + len / 2;auto handle = std::async(std::launch::async, sum<RAIter>, mid, end);//返回一个future类型对象int s = sum(beg, mid);return s + handle.get();//取得future对象的值}int _tmain(int argc, _TCHAR* argv[]){// std::vector<int> v(10000, 2);// std::cout << "the sum is " << sum(v.begin(), v.end()) << "\n";std::packaged_task<int()> task([](){return 7; });//包装函数 std::future<int> f1 = task.get_future(); //取得一个future对象std::thread(std::move(task)).detach();//开启一个线程std::future<int> f2 = std::async(std::launch::async, [](){return 8; });//通过async直接返回future对象 std::promise<int> p; std::future<int> f3 = p.get_future(); //将promise和future对象绑定// std::thread([](std::promise<int> p){p.set_value_at_thread_exit(9); }, std::move(p)).detach();std::cout << "waiting.." << std::flush;f1.wait();f2.wait();//f3.wait();std::cout << "done!"<< f1.get() << ' ' << f2.get() << ' ';// << f3.get() << '\n';    int a;int b =  std::move(a);//左值转换为右值a = 1;std::cout << "a:" << a << '\n' << "b:" << b << '\n';}

0 0
原创粉丝点击