名前空間
変種
操作

std::shared_future::wait_for

提供: cppreference.com
 
 
スレッドサポートライブラリ
スレッド
(C++11)
this_thread 名前空間
(C++11)
(C++11)
(C++11)
相互排他
(C++11)
汎用ロック管理
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
条件変数
(C++11)
フューチャー
(C++11)
(C++11)
(C++11)
(C++11)
 
 
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 を投げることが推奨されます。

[編集]

#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

[編集] 関連項目

結果が利用可能になるのを待ちます
(パブリックメンバ関数) [edit]
結果を待ちます。 指定時刻に達するまで利用可能にならなければリターンします
(パブリックメンバ関数) [edit]