std::future
科技促进发展:未来
Defined in header | | |
---|---|---|
template< class T > class future; | (1) | (since C++11) |
template< class T > class future<T&>; | (2) | (since C++11) |
template<> class future<void>; | (3) | (since C++11) |
类模板std::future
提供访问异步操作结果的机制:
- 创建的异步操作%28
std::async
,,,std::packaged_task
,或std::promise
%29可以提供std::future
对象指定为该异步操作的创建者。
- 然后,异步操作的创建者可以使用各种方法来查询、等待或从
std::future
如果异步操作尚未提供值,这些方法可能会阻塞。
- 当异步操作准备向创建者发送结果时,可以通过修改
共享状态
%28等std::promise::set_value
%29,链接到创建者%27 sstd::future
...
请注意std::future
与任何其他异步返回对象%28不共享的引用共享状态std::shared_future
29%。
成员函数
(constructor) | constructs the future object (public member function) |
---|---|
(destructor) | destructs the future object (public member function) |
operator= | moves the future object (public member function) |
share | transfers the shared state from *this to a shared_future and returns it (public member function) |
得到结果
GET返回结果%28公共成员函数%29
国家
有效检查未来是否具有共享状态%28公共成员函数%29
等待结果变为可用%28公共成员函数%29
等待[医]对于等待结果,如果指定的超时持续时间%28公共成员函数%29不可用,则返回
等待[医]在等待结果之前,如果指定的时间点已达到%28公共成员函数%29,则返回不可用的结果。
例
二次
#include <iostream>
#include <future>
#include <thread>
int main()
{
// future from a packaged_task
std::packaged_task<int()> task([](){ return 7; } // wrap the function
std::future<int> f1 = task.get_future( // get a future
std::thread(std::move(task)).detach( // launch on a thread
// future from an async()
std::future<int> f2 = std::async(std::launch::async, [](){ return 8; }
// future from a promise
std::promise<int> p;
std::future<int> f3 = p.get_future(
std::thread( [&p]{ p.set_value_at_thread_exit(9 }).detach(
std::cout << "Waiting..." << std::flush;
f1.wait(
f2.wait(
f3.wait(
std::cout << "Done!\nResults are: "
<< f1.get() << ' ' << f2.get() << ' ' << f3.get() << '\n';
}
二次
产出:
二次
Waiting...Done!
Results are: 7 8 9
二次
另见
async (C++11) | runs a function asynchronously (potentially in a new thread) and returns a std::future that will hold the result (function template) |
---|---|
shared_future (C++11) | waits for a value (possibly referenced by other futures) that is set asynchronously (class template) |
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。