c++11 future promise
std::future
std::future 代表未来得到,可以使用std::async 来执行
std::async 为异步编程的高级封装,封装了std::future的操作,基本上可以代替std::thread。
int result_future()
{int i=0,ret = 0;std::this_thread::sleep_for(std::chrono::seconds(2));return ret + 1;
}
1 情况
获取时执行,会阻塞执行,分两种情况,1 是时间
std::future<int> result = std::async(result_future);
//以下为假设执行了1秒,而result_future执行了2秒,则实际上只等待了1秒
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << result.get() << std::endl;
2 情况
std::future<int> result = std::async(result_future);
//以下为假设执行了3秒,而result_future执行了2秒,则实际上不用等待了,直接执行
std::this_thread::sleep_for(std::chrono::seconds(3));
std::cout << result.get() << std::endl;--->直接执行
std::promise
#include <iostream>
#include <future>
#include <string>
#include <thread>void print(std::promise<int>& p)
{//模拟执行数据库查询std::this_thread::sleep_for(std::chrono::milliseconds(500));p.set_value(1000);
}void dotest(int in)
{std::cout << "the value is "<<in<< std::endl;
}int main()
{std::promise<int> promise;std::future<int> result = promise.get_future();std::thread t(print, std::ref(promise));dotest(result.get());t.join();std::cout << "the thread is over" << std::endl;return 0;
}
以上用线程执行了一个print函数,std::promise这种值使用set_value 函数来设置值,这样,线程有了返回值,线程之间的通信问题变得非常简单!
std::future和std::promise 配合执行线程间通信,是一个非常好的方式!
c++11 future promise相关推荐
- folly教程系列之:future/promise
attension:本文严禁转载. 一.前言 promise/future是一个非常重要的异步编程模型,它可以让我们摆脱传统的回调陷阱,从而使用更加优雅.清晰的方式进行异步编程.c++11中 ...
- 【转】现代c++开发利器folly教程系列之:future/promise
一.前言 promise/future是一个非常重要的异步编程模型,它可以让我们摆脱传统的回调陷阱,从而使用更加优雅.清晰的方式进行异步编程.c++11中已经开始支持std::future/std:: ...
- C++异步调用利器future/promise实现原理
前言 在异步编程中,各种回调将让人眼花缭乱,代码分散,维护起来十分困难.boost和C++11 的 future/promise 提供了一个很好的解决方案,使得代码更加漂亮.易维护. 在工作中,我也用 ...
- rust异步编程--理解并发/多线程/回调/异步/future/promise/async/await/tokio
1. 异步编程简介 通常我们将消息通信分成同步和异步两种: 同步就是消息的发送方要等待消息返回才能继续处理其它事情 异步就是消息的发送方不需要等待消息返回就可以处理其它事情 很显然异步允许我们同时做更 ...
- future promise java_Future与Promise
https://code.csdn.NET/DOC_Scala/chinese_scala_offical_document/file/Futures-and-Promises-cn.md#ancho ...
- future promise shared_future简单使用
#include #include #include /furture 和promi******************/ int display(const int& value) { re ...
- future promise java_第四章 Future和Promise
Netty是一个异步网络处理框架,在实现中大量使用了Future机制,并在Java自带Future的基础上,增加了Promise机制.这两者的目的都是使异步编程更加方便使用.在阅读源码之前,我们需要对 ...
- 详谈C++11新特性之future及开源项目ananas(folly,std c++11和ananas的future各自的区别是?)
一.前言 1.最早我是从微信公众号看到这篇文章的,了解到开源项目ananas(A C++11/golang protobuf RPC framework)实现了Linux高性能网络库和rpc功能,里面 ...
- C++11中std::promise的使用
C++11中的std::promise是个模板类.一个std::promise对象可以存储由future对象(可能在另一个线程中)检索的T类型的值或派生自std::exception的异常,并提供一个 ...
最新文章
- 设计模式笔记——Adapter
- 怎样测试运算放大器的输入失调电压?
- oracle中怎么用累计,oracle实现累加,累计百分比计算
- 浅析x86架构中cache的组织结构
- Spring官网阅读(三)自动注入
- matlab 交叉验证 代码,交叉验证(Cross Validation)方法思想简介
- SQLSERVER中的自旋锁
- JAVA好学吗?工资待遇怎么样?
- 快速上手,使用 Kotlin 把支付宝小程序装进自己的 App
- Docker镜像备份与迁移
- idea将本地项目推送至远程仓库(图形化版本01)
- VS2019中,一个解决方案拥有多个项目,如何快速选择启动项目
- laravel5.2总结--服务提供者,契约(Contracts)
- opencv检测相交点_OpenCV学习笔记(八) 边缘、线与圆的检测
- 谷歌翻译器-谷歌翻译器软件批量自动翻译
- 怎么用python画世界地图_python如何画出漂亮的地图?
- 关于人性论视角下网络虚拟社会的伦理思考
- 如果你的电脑只能安装三个软件, 你会选择哪三个?
- 解决iPhone模拟器无法启动的方法
- python中怎么取小数点后两位函数_python中round函数保留两位小数的方法
热门文章
- python简单圣诞树手工折纸_简单立体手工折纸圣诞树的视频教程
- 特斯拉第一季度交付31万辆汽车
- “王炸”来了?苹果下一代Mac Pro将搭载两颗M1 Ultra芯片
- iPhone SE 3渲染图曝光:还是熟悉的味道
- 任正非:华为要防止内卷 精益求精不叫内卷
- 中国恒大拟出售恒大汽车2.66%股权 配股金额约106亿港元
- Android 11首个预览版发布:打开飞行模式蓝牙耳机不断连
- 曝微信低调上线“银行储蓄”服务,这是越来越像支付宝的节奏?
- 苹果A13打得过麒麟990吗?看完秒懂
- 这就是八成女性不爱用刷脸支付的原因!支付宝:一周内给安排上