std::future
が終了したかどうかを確認することはできますか?私ができる唯一の方法は、ゼロの持続時間でwait_for
を呼び出し、ステータスがready
であるかどうかを確認することですが、より良い方法はありますか?
あなたは正しいですし、wait_until
過去の時刻(これは同等)を使用するより良い方法はありません。
より便利な構文が必要な場合は、常に小さなラッパーを作成できます。
template<typename R>
bool is_ready(std::future<R> const& f)
{ return f.wait_for(std::chrono::seconds(0)) == std::future_status::ready; }
N.B.関数が延期された場合、これは決してtrueを返さないので、おそらくwait_for
特定の時間が経過した後、またはシステムの負荷が低いときに、遅延タスクを同期的に実行したい場合に直接。
Is_readyメンバー関数があります 作業中 std :: future用です。それまでの間、VC実装には_Is_ready()メンバーがあります。
私の最初の賭けは、期間が0の_wait_for
_を呼び出し、_future_status::ready
_、_future_status::deferred
_、または_future_status::timeout
_のいずれかである可能性のある結果コードを確認することです。
cppreference では、valid()
と主張しています結果が利用可能かどうかをチェックですが、標準ではvalid()
はtrue
を返します_*this
_が共有状態を参照する場合、その状態がreadyであるかどうかに関係なく。