std::shared_future<T>::wait_for
提供: cppreference.com
< cpp | thread | shared future
template< class Rep, class Period > std::future_status wait_for( const std::chrono::duration<Rep,Period>& timeout_duration ) const; |
(C++11以上) | |
結果が利用可能になるまで待ちます。 指定された timeout_duration
が経過するか、結果が利用可能になるか、どちらかが先に発生するまでブロックします。 結果の状態を表す値を返します。
スケジューリングやリソースの奪い合いによる遅延のため、この関数は timeout_duration
より長くブロックする可能性があります。
標準は時間計測に steady_clock を使用することを推奨しています。 処理系が代わりに system_clock を使用する場合、待機時間は時計調整の影響も受けるかもしれません。
この関数を呼ぶ前に valid()== false であった場合、動作は未定義です。
目次 |
[編集] 引数
timeout_duration | - | ブロックする最大時間 |
[編集] 戻り値
定数 | 説明 |
future_status::deferred | 結果を計算するための関数はまだ開始されていません |
future_status::ready | 結果は準備完了しています |
future_status::timeout | タイムアウトが経過しました |
[編集] 例外
実行中に clock、time_point、または duration によって投げられるあらゆる例外 (標準ライブラリによって提供される clock、time_point、および duration は、例外を投げることはありません)。
[編集] ノート
処理系は呼び出し前に valid == false であった場合を検出してエラーコンディション future_errc::no_state を持つ future_error を投げることが推奨されます。
[編集] 例
Run this code
#include <iostream> #include <future> #include <thread> #include <chrono> int main() { std::shared_future<int> future = std::async(std::launch::async, [](){ std::this_thread::sleep_for(std::chrono::seconds(3)); return 8; }); std::cout << "waiting...\n"; std::future_status status; do { status = future.wait_for(std::chrono::seconds(1)); if (status == std::future_status::deferred) { std::cout << "deferred\n"; } else if (status == std::future_status::timeout) { std::cout << "timeout\n"; } else if (status == std::future_status::ready) { std::cout << "ready!\n"; } } while (status != std::future_status::ready); std::cout << "result is " << future.get() << '\n'; }
出力例:
waiting... timeout timeout ready! result is 8
[編集] 関連項目
結果が利用可能になるのを待ちます (パブリックメンバ関数) | |
結果を待ちます。 指定時刻に達するまで利用可能にならなければリターンします (パブリックメンバ関数) |