public member function
<future>

std::packaged_task::reset

void reset();
重置任务
重置对象,为其赋予一个新的共享状态,但保持存储的任务不变。

这使得存储的任务可以被调用

调用前与该对象关联的共享状态(如果有)将被放弃(如同该 packaged_task销毁一样)。

在内部,该函数行为上如同将一个新构造的 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();
  tsk(33);
  std::cout << "The triple of 33 is " << fut.get() << ".\n";

  // re-use same task object:
  tsk.reset();
  fut = tsk.get_future();
  std::thread(std::move(tsk),99).detach();
  std::cout << "Thre triple of 99 is " << fut.get() << ".\n";

  return 0;
}

输出

The triple of 33 is 99.
The triple of 99 is 297.


数据竞争

*packaged_task*已被修改。
共享状态被修改为原子操作(不会导致数据竞争)。

异常安全

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

此成员函数在以下条件下抛出异常
异常类型错误条件描述
future_errorfuture_errc::no_state该对象没有*共享状态*(它是*默认构造*的*packaged_task*)。
bad_alloc-无法分配新的共享状态的内存。
此成员函数在存储的任务的移动构造函数抛出异常时也会抛出,并且(取决于库实现)也可能抛出以报告其他情况。

另见