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相关推荐

  1. folly教程系列之:future/promise

         attension:本文严禁转载. 一.前言 promise/future是一个非常重要的异步编程模型,它可以让我们摆脱传统的回调陷阱,从而使用更加优雅.清晰的方式进行异步编程.c++11中 ...

  2. 【转】现代c++开发利器folly教程系列之:future/promise

    一.前言 promise/future是一个非常重要的异步编程模型,它可以让我们摆脱传统的回调陷阱,从而使用更加优雅.清晰的方式进行异步编程.c++11中已经开始支持std::future/std:: ...

  3. C++异步调用利器future/promise实现原理

    前言 在异步编程中,各种回调将让人眼花缭乱,代码分散,维护起来十分困难.boost和C++11 的 future/promise 提供了一个很好的解决方案,使得代码更加漂亮.易维护. 在工作中,我也用 ...

  4. rust异步编程--理解并发/多线程/回调/异步/future/promise/async/await/tokio

    1. 异步编程简介 通常我们将消息通信分成同步和异步两种: 同步就是消息的发送方要等待消息返回才能继续处理其它事情 异步就是消息的发送方不需要等待消息返回就可以处理其它事情 很显然异步允许我们同时做更 ...

  5. future promise java_Future与Promise

    https://code.csdn.NET/DOC_Scala/chinese_scala_offical_document/file/Futures-and-Promises-cn.md#ancho ...

  6. future promise shared_future简单使用

    #include #include #include /furture 和promi******************/ int display(const int& value) { re ...

  7. future promise java_第四章 Future和Promise

    Netty是一个异步网络处理框架,在实现中大量使用了Future机制,并在Java自带Future的基础上,增加了Promise机制.这两者的目的都是使异步编程更加方便使用.在阅读源码之前,我们需要对 ...

  8. 详谈C++11新特性之future及开源项目ananas(folly,std c++11和ananas的future各自的区别是?)

    一.前言 1.最早我是从微信公众号看到这篇文章的,了解到开源项目ananas(A C++11/golang protobuf RPC framework)实现了Linux高性能网络库和rpc功能,里面 ...

  9. C++11中std::promise的使用

    C++11中的std::promise是个模板类.一个std::promise对象可以存储由future对象(可能在另一个线程中)检索的T类型的值或派生自std::exception的异常,并提供一个 ...

最新文章

  1. 设计模式笔记——Adapter
  2. 怎样测试运算放大器的输入失调电压?
  3. oracle中怎么用累计,oracle实现累加,累计百分比计算
  4. 浅析x86架构中cache的组织结构
  5. Spring官网阅读(三)自动注入
  6. matlab 交叉验证 代码,交叉验证(Cross Validation)方法思想简介
  7. SQLSERVER中的自旋锁
  8. JAVA好学吗?工资待遇怎么样?
  9. 快速上手,使用 Kotlin 把支付宝小程序装进自己的 App
  10. Docker镜像备份与迁移
  11. idea将本地项目推送至远程仓库(图形化版本01)
  12. VS2019中,一个解决方案拥有多个项目,如何快速选择启动项目
  13. laravel5.2总结--服务提供者,契约(Contracts)
  14. opencv检测相交点_OpenCV学习笔记(八) 边缘、线与圆的检测
  15. 谷歌翻译器-谷歌翻译器软件批量自动翻译
  16. 怎么用python画世界地图_python如何画出漂亮的地图?
  17. 关于人性论视角下网络虚拟社会的伦理思考
  18. 如果你的电脑只能安装三个软件, 你会选择哪三个?
  19. 解决iPhone模拟器无法启动的方法
  20. python中怎么取小数点后两位函数_python中round函数保留两位小数的方法

热门文章

  1. python简单圣诞树手工折纸_简单立体手工折纸圣诞树的视频教程
  2. 特斯拉第一季度交付31万辆汽车
  3. “王炸”来了?苹果下一代Mac Pro将搭载两颗M1 Ultra芯片
  4. iPhone SE 3渲染图曝光:还是熟悉的味道
  5. 任正非:华为要防止内卷 精益求精不叫内卷
  6. 中国恒大拟出售恒大汽车2.66%股权 配股金额约106亿港元
  7. Android 11首个预览版发布:打开飞行模式蓝牙耳机不断连
  8. 曝微信低调上线“银行储蓄”服务,这是越来越像支付宝的节奏?
  9. 苹果A13打得过麒麟990吗?看完秒懂
  10. 这就是八成女性不爱用刷脸支付的原因!支付宝:一周内给安排上