Можно ли проверить std::future, закончился a или нет? Насколько я могу судить, единственный способ сделать это - позвонить 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; }
NB, если функция отложена, она никогда не вернет значение true, поэтому, вероятно, лучше проверить wait_forнепосредственно в случае, когда вы можете захотеть синхронно запустить отложенную задачу по прошествии определенного времени или когда загрузка системы низкая.
Комментариев нет:
Отправить комментарий