Получить статус std:: future



можно ли проверить, если a std::future закончил или нет? Насколько я могу судить, единственный способ сделать это-позвонить wait_for С нулевой продолжительностью и проверить, если статус ready или нет, но есть лучший способ?

729   3  

3 ответов:

- вы абсолютно правы, и, кроме вызова 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::будущее. В то же время реализация VC имеет член _Is_ready ().

моя первая ставка будет звонить wait_for с длительностью 0 и проверьте код результата, который может быть одним из future_status::ready,future_status::deferred или future_status::timeout.

на cppreference они утверждают, что valid()проверка если результат, но стандарт говорит, что valid() вернутся true если *this относится к общему состоянию, независимо от того, что государство готов или нет.

Comments

    Ничего не найдено.