std::future

来自cppreference.com
< cpp‎ | thread
 
 
线程的支持库
主题
原文:
Threads
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
thread(C++11)
this_thread命名空间
原文:
this_thread namespace
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
get_id(C++11)
yield(C++11)
sleep_for(C++11)
sleep_until(C++11)
相互排斥
原文:
Mutual exclusion
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
mutex(C++11)
timed_mutex(C++11)
通用锁管理
原文:
Generic lock management
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
lock_guard(C++11)
unique_lock(C++11)
defer_lock_t
try_to_lock_t
adopt_lock_t
(C++11)
(C++11)
(C++11)
lock(C++11)
try_lock(C++11)
defer_lock
try_to_lock
adopt_lock
(C++11)
(C++11)
(C++11)
条件变量
原文:
Condition variables
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
condition_variable(C++11)
condition_variable_any(C++11)
notify_all_at_thread_exit(C++11)
cv_status(C++11)
期货
原文:
Futures
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
promise(C++11)
future(C++11)
shared_future(C++11)
packaged_task(C++11)
async(C++11)
launch(C++11)
future_status(C++11)
future_error(C++11)
future_category(C++11)
future_errc(C++11)
 
std::future
future::future
future::~future
future::operator=
future::share
获得的结果
原文:
Getting the result
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
future::get
国家
原文:
State
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
future::valid
future::wait
future::wait_for
future::wait_until
 
定义于头文件 <future>
template< class T > class future;
(1) (C++11 起)
template< class T > class future<T&>;
(2) (C++11 起)
template<>          class future<void>;
(3) (C++11 起)

类模板std::future提供了一个机制来访问异步操作的结果。

  • 一个异步操作(通过std::asyncstd::packaged_taskstd::promise创建)可以提供一个std::future对象给这个异步操作的创建者。
  • 异步操作的创建者可以使用多个方法来从std::future中查询、等待或提取一个值。如果异步操作尚未提供一个值,这些方法可能会阻塞。
  • 当异步操作已准备好发送结果给创建者时,它可以通过修改与创建者的std::future相关的“共享状态”(例如std::promise::set_value)来完成发送。

需要注意的是std::future引用的共享状态​​不与任何其他的异步操作返回对象共享(与std::shared_future相反)。

目录

[编辑] 成员函数

构建future对象
(公开成员函数) [edit]
析构future对象
(公开成员函数) [edit]
移动future对象
(公开成员函数) [edit]
返回一个与*this相关的结果的引用——shared_future对象
(公开成员函数) [edit]
获得结果
返回结果
(公开成员函数) [edit]
状态
检查该future对象是否与一个promise对象有共享的状态
(公开成员函数) [edit]
等待结果变得可用
(公开成员函数) [edit]
等待结果,如果在指定的超时间隔后仍然无法得到结果,则返回。
(公开成员函数) [edit]
等待结果,如果在已经到达指定的时间点时仍然无法得到结果,则返回。
(公开成员函数) [edit]

[编辑] 例子

#include <iostream>
#include <future>
#include <thread>
 
int main()
{
    // 从 packaged_task 获得 future
    std::packaged_task<int()> task([](){ return 7; }); // 将函数包裹起来
    std::future<int> f1 = task.get_future();  // 获得 future 对象
    std::thread(std::move(task)).detach(); // 运行对应的线程
 
    // 从 async() 获得 future 对象
    std::future<int> f2 = std::async(std::launch::async, [](){ return 8; });
 
    // 从 promise 获得 future 对象
    std::promise<int> p;
    std::future<int> f3 = p.get_future();
    std::thread( [](std::promise<int>& p){ p.set_value(9); }, 
                 std::ref(p) ).detach();
 
    std::cout << "Waiting...";
    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

[编辑] 另请参阅

(C++11)
异步地运行一个函数(可能在一个新线程中),然后返回一个包含运行结果的std::future对象。
(函数模板) [edit]
等待一个被异步地设置的值(可能被其它future对象引用)
(类模板) [edit]