0

Я использую Qt5 на платформе Windows7.Qt: Как отменить ВСЕ обработку QtConcurrent :: map()?

В моем текущем приложении я использую QtConcurrent для обработки всех элементов в контейнере.
Если я решаю выйти из приложения, я использую: QFuture::cancel().
Согласно документам http://doc.qt.io/qt-5/qfuture.html#cancel, а не все асинхронные вычисления отменены. Вероятно, отменены только те, которые еще не начаты? И текущим вычислениям по-прежнему разрешено продолжать работать?

Если выше предположение верно и QFuture::cancel() является не достаточно, то, что я должен сделать для того, чтобы остановить также работает (постоянная) обработку и выход из приложения корректно?

ответ

1

Вы не можете предугадать и изящно прекратить асинхронные операции. Сами операции должны поддерживать совместную отмену.

Другими словами, любая инфраструктура, библиотека или операционная система не может предоставить вам эту функцию. Вы должны обработать отмененные операции, которые уже начались.

+0

Итак, вы говорите, что это ** не возможно заставить остановить вычисления 'извне 'потоков обработки? Тогда существует ли «обычная/лучшая практика» для этого (остановить все запущенные потоки)? Есть ли что-то (реализация), характерное для Qt? –

+0

@groenhen Ключевая часть в их ответе не может ** изящно ** прекратить. Конечно, вы можете прекратить/убить поток/процесс, но обычно это не путь. Я не уверен, что Qt предоставляет способ сделать это в интерфейсе, который вы используете. –

+1

@groenhen Чтобы изящно отменить, вам нужно построить эту логику в своей обработке. Например, если алгоритм управляется циклом, каждая итерация цикла может проверить, была ли операция отменена и выйти из цикла (т. Е. Без прохождения всех итераций цикла). –

 Смежные вопросы

  • Нет связанных вопросов^_^