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-無法分配新的共享狀態的記憶體。
此成員函式在儲存的任務的移動建構函式丟擲異常時也會丟擲,並且(取決於庫實現)也可能丟擲以報告其他情況。

另見