最終更新日時: 2025年07月12日 02時16分44秒 (JST)
Koichi Murase が更新

履歴 編集

function
<future>

# std::future::wait(C++11)

    void wait() const;

## 概要

処理が完了するまで待機する

## 効果

共有状態が準備完了状態(`future_status::ready`)になるまでこの関数をブロックする。

## 戻り値

なし

## 事前条件

- `valid() == true`
  - この条件を満たさなかった場合、処理系によっては`future_error` 例外を投げることがある。

## 例

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

    void calc(std::promise<int> p)
    {
      p.set_value(3); // 結果を書き込む
    }

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

      std::thread t(calc, std::move(p));

      // 結果が書き込まれるまで待機する
      f.wait();

      // 結果を取り出す(準備完了しているため、すぐに値を取り出せる)
      std::cout << f.get() << std::endl;

      t.join();
    }

### 出力

    3

## バージョン

### 言語

- C++11

### 処理系

- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: 2012 ✅
  - 2012段階の`std::thread`クラスは、コンストラクタに引数をムーブで渡すことができない。そのため、`promise`オブジェクトはスレッド間の共有オブジェクトにする必要がある。(所有権が曖昧になるため、スタイルとしてはよくない) #737812 - std::thread does not accept std::move

## 参照