Skip to content

Latest commit

 

History

History
91 lines (67 loc) · 2.23 KB

get_future.md

File metadata and controls

91 lines (67 loc) · 2.23 KB

get_future

  • future[meta header]
  • std[meta namespace]
  • packaged_task[meta class]
  • function[meta id-type]
  • cpp11[meta cpp]
future<R> get_future();
  • future[link ../future.md]

概要

結果取得のためのfutureオブジェクトを取得する

戻り値

*thisと同じ共有状態を持つfuture<R>オブジェクトを返す

同期操作

この関数の呼び出しでは、以下の呼び出しとのデータ競合は発生しない (C++20):

これは、以下のようなケースをサポートするための規定:

std::packaged_task<void()> p;
std::thread t{ []{
  p.get_future().wait();
}};
p();
t.join();
  • wait()[link /reference/future/future/wait.md]
  • p()[link op_call.md]

例外

この関数は、以下のerror conditionを持つfuture_error例外オブジェクトを送出する可能性がある:

  • future_already_retrieved : すでにこの関数によって共有状態が作られている
  • no_state*thisが共有状態を持っていない(デフォルト構築されたpackaged_task、ムーブされたあとなどに起こりうる)

#include <iostream>
#include <future>

int calc() { return 3; }

int main()
{
  std::packaged_task<int()> task(calc); // calc()を非同期タスクとして登録
  std::future<int> f = task.get_future(); // 結果値取得のためのfutureを取得

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

  // 結果を取得
  int result = f.get();
  std::cout << result << std::endl;
}
  • get_future()[color ff0000]
  • std::future[link /reference/future/future.md]
  • task()[link op_call.md]
  • f.get()[link /reference/future/future/get.md]

出力

3

バージョン

言語

  • C++11

処理系

参照