template <class Rep, class Period>
future_status wait_for(const chrono::duration<Rep, Period>& rel_time) const;
概要
相対時間でタイムアウトを指定して、処理が完了するまで待機する
効果
共有状態が遅延状態(future_status::deferred
)の場合、この関数は何もしない。そうでない場合、rel_time
で指定された相対時間の期限まで、共有状態が準備状態(future_status::ready
)になるのを待機する。
戻り値
future_status::deferred
: 共有状態が遅延関数を持っているfuture_status::ready
: 共有状態が準備完了になったfuture_status::timeout
:rel_time
で指定された相対時間内に準備完了にならず、タイムアウトになった
例外
- C++14 : 時計クラス、
time_point
クラス、duration
クラスの構築が例外を送出する場合、この関数はそれらの例外を送出する。
例
#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::shared_future<int> f = p.get_future().share();
std::thread t(calc, std::move(p));
// 結果が書き込まれるまで待機する
// 3秒でタイムアウト
std::future_status result = f.wait_for(std::chrono::seconds(3));
if (result != std::future_status::timeout) {
// 結果を取り出す(準備完了しているため、すぐに値を取り出せる)
std::cout << f.get() << std::endl;
}
else {
std::cout << "timeout" << std::endl;
}
t.join();
}
出力例
3
バージョン
言語
- C++11
処理系
- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: 2012 ✅