You are correct, and apart from calling wait_until
with a time in the past (which is equivalent) there is no better way.
You could always write a little wrapper if you want a more convenient syntax:
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. if the function is deferred this will never return true, so it's probably better to check wait_for
directly in the case where you might want to run the deferred task synchronously after a certain time has passed or when system load is low.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…