std::shared_future<T>::wait_for
From cppreference.com
< cpp | スレッド | 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 が経過するか、結果が利用可能になるかのいずれか早い方までブロックします。戻り値は結果の状態を示します。
遅延評価を使用した std::async の呼び出しの結果である future の場合、この関数は待機せずにすぐに返ります。
スケジューリング遅延やリソース競合遅延のため、この関数は timeout_duration よりも長くブロックする可能性があります。
標準では、期間の測定に安定したクロックを使用することが推奨されています。実装が代わりにシステムクロックを使用する場合、待機時間もクロック調整の影響を受ける可能性があります。
この関数呼び出しの前に valid() が false の場合、動作は未定義です。
目次 |
[編集] パラメータ
| timeout_duration | - | 待機する最大期間 |
[編集] 戻り値
| Constant | 説明 |
| future_status::deferred | 共有状態には遅延評価を使用した遅延関数が含まれているため、結果は明示的に要求された場合にのみ計算されます。 |
| future_status::ready | 結果が準備完了です。 |
| future_status::timeout | タイムアウトが期限切れになりました。 |
[編集] 例外
実行中にクロック、time_point、または duration によってスローされる可能性のある例外(標準ライブラリで提供されるクロック、time_point、および duration は決して例外をスローしません)。
[編集] 注釈
実装は、呼び出し前に valid == false のケースを検出し、エラー条件 std::future_errc::no_state の std::future_error をスローすることが推奨されます。
[編集] 例
このコードを実行
#include <chrono> #include <future> #include <iostream> #include <thread> using namespace std::chrono_literals; int main() { std::shared_future<int> future = std::async(std::launch::async, []() { std::this_thread::sleep_for(3s); return 8; }); std::cout << "waiting...\n"; std::future_status status; do { switch (status = future.wait_for(1s); status) { case std::future_status::deferred: std::cout << "deferred\n"; break; case std::future_status::timeout: std::cout << "timeout\n"; break; case std::future_status::ready: std::cout << "ready!\n"; break; } } while (status != std::future_status::ready); std::cout << "result is " << future.get() << '\n'; }
実行結果の例
waiting... timeout timeout timeout ready! result is 8
[編集] 関連項目
| 結果が利用可能になるまで待機します。 (public member function) | |
| 指定された時刻までに結果が利用可能でない場合、待機して戻ります。 (public member function) |