名前空間
変種
操作

std::shared_future<T>::wait_for

From cppreference.com
 
 
並行性サポートライブラリ
スレッド
(C++11)
(C++20)
this_thread 名前空間
(C++11)
(C++11)
(C++11)
協調的なキャンセル
排他制御
(C++11)
汎用ロック管理
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
条件変数
(C++11)
セマフォ
ラッチとバリア
(C++20)
(C++20)
future
(C++11)
(C++11)
(C++11)
(C++11)
安全なメモリ解放 (Safe Reclamation)
(C++26)
ハザードポインタ
アトミック型
(C++11)
(C++20)
アトミック型の初期化
(C++11)(C++20で非推奨)
(C++11)(C++20で非推奨)
メモリオーダー
(C++11)(C++26で非推奨)
アトミック操作のためのフリー関数
アトミックフラグのためのフリー関数
 
 
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_statestd::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) [編集]
English 日本語 中文(简体) 中文(繁體)