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