【C++11】promise和future介绍
- C++11提供了std::promise和std::future两个模板类,通过这两个模板类可以实现异步存储值并获取值的功能。
std::promise
The class template std::promise provides a facility to store a value or an exception that is later acquired asynchronously via a std::future object created by the std::promise object. Note that the std::promise object is meant to be used only once.
emplate< class R > class promise;
template< class R > class promise<R&>;
template<> class promise<void>;
函数 | 说明 |
---|
构造函数 | - | 析构函数 | - | operator= | - | swap | 交换两个promise对象 | get_future | 绑定并返回一个future对象 | set_value | 设置值 | set_value_at_thread_exit | 在线程退出时设置值 | set_exception | 设置异常 | set_exception_at_thread_exit | 在线程退出时设置异常 |
std::future
The class template std::future provides a mechanism to access the result of asynchronous operations
- std::future可以被 std::async,std::packaged_task,std::promise创建,并用于异步获得 std::async,std::packaged_task,std::promise等对象设置的值或异常。
- 模板类定义
template< class T > class future;
template< class T > class future<T&>;
template<> class future<void>;
函数 | 说明 |
---|
构造函数 | - | 析构函数 | - | operator= | - | get | 获取结果 | valid | checks if the future has a shared state | wait | 等待结果可用 | wait_for | 等待结果可用(指定等待时间) | wait_until | 等待结果可用(指定等待时刻) |
示例
#include <iostream>
#include <thread>
#include <future>
#include <string>
int main()
{
std::promise<std::string> p;
std::future<std::string> f = p.get_future();
std::thread t([&p]{
p.set_value("lindduo");
});
std::string ret = f.get();
std::cout << ret << std::endl;
t.join();
return 0;
}
|