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

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

Вы правы, и, помимо вызова wait_until с временем в прошлом (что эквивалентно), нет лучшего способа.

Вы всегда можете написать небольшую обертку, если хотите более удобный синтаксис:

 template bool is_ready(std::future const& f) { return f.wait_for(std::chrono::seconds(0)) == std::future_status::ready; } 

NB, если функция отложена, это никогда не вернет true, поэтому, вероятно, лучше проверить wait_for непосредственно в случае, когда вы можете запускать отложенную задачу синхронно по прошествии определенного времени или при низкой загрузке системы.

В работе для std :: future есть функция member_ready. Тем временем, реализация VC имеет элемент _Is_ready ().

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

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

Interesting Posts

Почему Scala поддерживает теневые переменные?

Как переключить вкладки в Notepad ++ с помощью Ctrl + PgUp / Down?

Является ли String.Format таким же эффективным, как StringBuilder

Перекодировать категориальный фактор с N категориями в N двоичных столбцов

Введите, чтобы открыть файл в Finder

Угловой-ui-router: ui-sref-active и вложенные состояния

Есть ли какой-либо API для интеграции сервера обмена Microsoft с Java-приложением для синхронизации задач?

Как указать JDK для домена GlassFish?

Проблемы с использованием Maven и SSL за прокси-сервером

Как загрузить изображение в WPF во время выполнения?

Встраивание файлов в Excel с помощью Apache POI

Как использовать PriorityQueue?

Сделать flex-grow расширять элементы на основе их первоначального размера

Как запустить программу с разрешениями администратора при запуске и свернуть до лотка?

конструктор в качестве делегата – возможно ли это на C #?

Давайте будем гением компьютера.