std::shared_future<T>:: wait_for
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Getting the result | ||||
| State | ||||
|
shared_future::wait_for
|
||||
|
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 の呼び出し結果である場合、この関数は待機せずに即座に返ります。
この関数は、スケジューリングやリソース競合による遅延のため、 timeout_duration よりも長くブロックする可能性があります。
標準では、持続時間の測定には安定したクロックを使用することが推奨されています。実装がシステムクロックを使用する場合、待機時間はクロック調整の影響を受ける可能性もあります。
valid() がこの関数の呼び出し前に false の場合、動作は未定義です。
目次 |
パラメータ
| timeout_duration | - | ブロックする最大時間 |
戻り値
| 定数 | 説明 |
| future_status::deferred | 共有状態は遅延評価を使用した遅延関数を含んでいるため、結果は明示的に要求されたときにのみ計算される |
| future_status::ready | 結果の準備が完了している |
| future_status::timeout | タイムアウトが期限切れとなった |
例外
クロック、time_point、またはdurationの実行中にスローされる例外(標準ライブラリで提供されるクロック、タイムポイント、およびデュレーションは例外をスローしません)。
注記
実装では、呼び出し前に valid == false の場合を検出し、 std::future_error を std::future_errc::no_state のエラー条件でスローすることが推奨されます。
例
#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
関連項目
|
結果が利用可能になるまで待機
(公開メンバ関数) |
|
|
結果を待機し、指定された時間ポイントに達するまでに利用可能にならない場合は返る
(公開メンバ関数) |