public member function
<future>

std::packaged_task::get_future

future<Ret> get_future();
获取 future
返回一个与该对象的共享状态相关联的future对象。

返回的future对象可以访问packaged_task设置在共享状态中的值或异常,一旦其存储的任务调用

每个packaged_task共享状态只能检索一个future对象。

调用此函数后,packaged_task预计会在某个时候使其共享状态准备就绪(通过调用其存储的任务),否则在销毁时会自动设置为就绪状态,并包含一个类型为future_error(错误条件为broken_promise)的异常。

参数



返回值

一个引用了与此packaged_task相同共享状态future对象。
Ret存储的任务的返回类型(packaged_task的第一个模板参数)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// packaged_task::get_future
#include <iostream>     // std::cout
#include <utility>      // std::move
#include <future>       // std::packaged_task, std::future
#include <thread>       // std::thread

// a simple task:
int triple (int x) { return x*3; }

int main ()
{
  std::packaged_task<int(int)> tsk (triple); // package task

  std::future<int> fut = tsk.get_future();   // get future

  std::thread(std::move(tsk),33).detach();   // spawn thread and call task

  // ...

  int value = fut.get();                     // wait for the task to complete and get result

  std::cout << "The triple of 33 is " << value << ".\n";

  return 0;
}

输出

The triple of 33 is 99.


数据竞争

packaged_task对象已被修改。

异常安全

基本保证:如果抛出异常,*packaged_task*处于有效状态。

此成员函数在以下条件下抛出异常
异常类型错误条件描述
future_errorfuture_errc::no_state对象没有共享状态
future_errorfuture_errc::future_already_retrieved先前对此成员函数的调用已检索过一个future
根据库的实现,此成员函数也可能抛出异常来报告其他情况(例如bad_allocsystem_error)。

另见