C++11 异步方法
来源:互联网 发布:世界历年gdp数据 编辑:程序博客网 时间:2024/06/07 00:09
C++11 提供了几种异步调用的方法,都能通过std::future来获取异步执行的结果。
1. std::promise 可以用来在线程间提供数据传递。std::future = std::promise.get_future()。线程中可以对promise赋值std::promise.set_value。赋值之后std::future.get()就会返回其他线程中设置的值。
#include <iostream>#include <future>#include <chrono>std::promise<int> promis;int main(int argc, const char * argv[]) { std::future<int> fuResult = promis.get_future(); std::thread t([](){ std::this_thread::sleep_for(std::chrono::seconds(10)); promis.set_value(123); }); t.detach(); std::cout<<"detach..."<<std::endl; std::cout<<fuResult.get()<<std::endl; return 0;}2. std::packaged_task 可以包裹一个函数, 有点类似std::function,不同之处在于这个可以通过get_future返回std::future对象来获取异步执行的函数结果。
#include <iostream>#include <future>#include <chrono>int main(int argc, const char * argv[]) { std::packaged_task<int()> m([](){ std::this_thread::sleep_for(std::chrono::seconds(10)); return 123; }); std::future<int> fuResult = m.get_future(); std::thread task(std::move(m)); task.detach(); std::cout<<"detach..."<<std::endl; std::cout<<fuResult.get()<<std::endl; return 0;}
3. std::async提供异步执行的方法,std::future = std::async(...), 函数执行完成后可以通过std::future.get()获取到执行函数的返回值。
#include <iostream>#include <future>#include <chrono>int main(int argc, const char * argv[]) { std::future<int> fuResult = std::async([](){ std::this_thread::sleep_for(std::chrono::seconds(10)); return 1; }); std::cout<<"detach..."<<std::endl; std::cout<<fuResult.get()<<std::endl; return 0;}
0 0
- C#Task异步调用方法
- C#同步方法转异步
- C++11 异步方法
- C#-异步
- 异步方法
- 【C#】往异步下载的方法传递自定义完成事件
- Objective-C 异步任务
- Objective-C 异步任务
- Objective-C异步编程
- c sharp 异步编程
- objective -c 异步处理
- [C#] 异步模式
- c#中的异步编程
- Objective-C异步编程
- [C#]Http异步请求
- C语言 同步 异步
- C#SOCKET异步通信
- 服务器端异步Web 方法
- EL表达式取map值
- ACM中关于oj的常见问题
- 前缀和后缀和
- 字符串展开(递归)hdu 1274
- 34.Python多项目开发环境分割利器——virtualenv
- C++11 异步方法
- 剑指offer第12题 最优解
- Android学习笔记035之HTTP协议
- webView的使用及注意事项
- webapp开发使用Cordova-Cordova教程
- poj 2349(Prime + Kruskal 最小生成树)
- C++学习之路(3) 常用数据结构与STL
- 使用SpanableString实现textview部分字体点击事件(不同颜色)
- Eclipse开发C/C++环境配置