最終更新日時:
が更新

履歴 編集

class template
<future>

std::promise(C++11)

namespace std {
  template <class R>
  class promise;
}

概要

promiseは、「別スレッドでの処理完了を待ち、その処理結果を取得する」といった非同期処理を実現するためのクラスであり、futureクラスと組み合わせて使用する。promiseが別スレッドでの処理結果を書き込み、futureがその結果を読み取る。promisefutureは内部的に同一の共有状態を参照する。これによってスレッド間での値の受け渡しやスレッド間同期を実現する。

このクラスはR&およびvoidの、2つの特殊化を持つ。

テンプレートパラメータ:

  • R : 結果値の型

メンバ関数

名前 説明 対応バージョン
(constructor) コンストラクタ C++11
(destructor) デストラクタ C++11
operator= 代入演算子 C++11
swap 他のpromiseオブジェクトと値を入れ替える C++11

結果の取得

名前 説明 対応バージョン
get_future 結果取得のためのfutureオブジェクトを取得する C++11

結果の設定

名前 説明 対応バージョン
set_value 結果の値を設定する C++11
set_exception 結果の例外を設定する C++11

遅延通知による結果の設定

名前 説明 対応バージョン
set_value_at_thread_exit スレッド終了時に結果の値を設定する C++11
set_exception_at_thread_exit スレッド終了時に結果の例外を設定する C++11

非メンバ関数

名前 説明 対応バージョン
swap 2つのpromiseオブジェクトを入れ替える C++11

その他

名前 説明 対応バージョン
uses_allocator promiseによる特殊化

#include <iostream>
#include <future>
#include <thread>
#include <utility>

void calc(std::promise<int> p)
{
  int sum = 0;
  for (int i = 0; i < 10; ++i) {
    sum += i + 1;
  }

  p.set_value(sum); // 結果値を書き込む
}

int main()
{
  std::promise<int> p;
  std::future<int> f = p.get_future();

  // 別スレッドで計算を行う
  std::thread t(calc, std::move(p));

  // calc()によって書き込まれた結果を取得
  std::cout << f.get() << std::endl;

  t.join();
}

出力

55

バージョン

言語

  • C++11

処理系

参照