c++中的异步编程——future,promise

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中的异步编程——future,promise相关的知识,希望对你有一定的参考价值。

参考技术A c++中创建线程很方便,例如下面

但是当我想异步获取线程的执行结果,就不太方便,join()并不能返回结果。
std::async,通过这个异步接口可以很方便的获取线程函数的执行结果。std::async会自动创建一个线程去调用线程函数,它返回一个std::future,这个future中存储了线程函数返回的结果,当我们需要线程函数的结果时,直接从future中获取,非常方便。

std::future提供了一种访问异步操作结果的机制。从字面意思来理解,它表示未来,这个名字非常贴切,因为一个异步操作我们是不可能马上就获取操作结果的,只能在未来某个时候获取,但是我们可以以同步等待的方式来获取结果,可以通过查询future的状态(future_status)来获取异步操作的结果。future_status有三种状态:

获取future结果有三种方式:

通过成员函数set_value可以设置std::promise中保存的值,该值最终会被与之关联的std::future::get读取到。需要注意的是:set_value只能被调用一次,多次调用会抛出std::future_error异常

输出

分桶常用,返回下界的iter
通常这么找下标

以上是关于c++中的异步编程——future,promise的主要内容,如果未能解决你的问题,请参考以下文章

Netty 中的异步编程 Future 和 Promise

C++ std::future与promise(异步回调异步调用)

C++ std::future与promise(异步回调异步调用)

folly教程系列之:future/promise

聊聊C++异步编程-2

[译] 探究 Swift 中的 Futures & Promises