Skip to content

Latest commit

 

History

History
101 lines (75 loc) · 2.8 KB

File metadata and controls

101 lines (75 loc) · 2.8 KB

reset

  • future[meta header]
  • std[meta namespace]
  • packaged_task[meta class]
  • function[meta id-type]
  • cpp11[meta cpp]
void reset();

概要

共有状態を作り直す。

一度タスクを実行したのちは共有状態への結果値の再格納ができないため、同じpackaged_taskオブジェクトの同じ関数(タスク)を再度非同期実行したい場合に使用する。

効果

メンバ変数として保持している、非同期実行する関数オブジェクトをfとして、

  • C++11: あたかも以下のように動作する

    *this = packaged_task(std::move(f));
    • std::move[link /reference/utility/move.md]
    • この操作によって、新たに共有状態を作成する。古い共有状態は放棄される(詳細はoperator=を参照)。
  • C++26: 以下と等価

    if (!valid())
      throw future_error(future_errc::no_state);
    *this = packaged_task(allocator_arg, a, std::move(f));
    • valid[link valid.md]
    • future_error[link ../future_error.md]
    • allocator_arg[link /reference/memory/allocator_arg_t.md]
    • std::move[link /reference/utility/move.md]

戻り値

なし

例外

この関数は、以下の例外を送出する可能性がある:

  • package_taskのコンストラクタ、またはタスクfのムーブコンストラクタが送出するあらゆる例外
  • future_error : 共有状態を持っていない状態でこの関数を呼び出した場合、no_stateをerror conditionにして送出する

#include <iostream>
#include <future>

int calc() { return 3; }

void execute(std::packaged_task<int()>& task)
{
  std::future<int> f = task.get_future(); // 結果値取得のためのfutureを取得
  task();
  std::cout << f.get() << std::endl;
}

int main()
{
  std::packaged_task<int()> task(calc); // calc()を非同期タスクとして登録

  execute(task); // タスクを実行

  task.reset(); // 共有状態を作り直す

  execute(task); // タスクを再度実行
}
  • reset()[color ff0000]
  • task.get_future()[link get_future.md]
  • std::future[link /reference/future/future.md]
  • f.get()[link /reference/future/future/get.md]

出力

3
3

バージョン

言語

  • C++11

処理系

参照