Я использую Qt5 на платформе Windows7.Qt: Как отменить ВСЕ обработку QtConcurrent :: map()?
В моем текущем приложении я использую QtConcurrent
для обработки всех элементов в контейнере.
Если я решаю выйти из приложения, я использую: QFuture::cancel()
.
Согласно документам http://doc.qt.io/qt-5/qfuture.html#cancel, а не все асинхронные вычисления отменены. Вероятно, отменены только те, которые еще не начаты? И текущим вычислениям по-прежнему разрешено продолжать работать?
Если выше предположение верно и QFuture::cancel()
является не достаточно, то, что я должен сделать для того, чтобы остановить также работает (постоянная) обработку и выход из приложения корректно?
Итак, вы говорите, что это ** не возможно заставить остановить вычисления 'извне 'потоков обработки? Тогда существует ли «обычная/лучшая практика» для этого (остановить все запущенные потоки)? Есть ли что-то (реализация), характерное для Qt? –
@groenhen Ключевая часть в их ответе не может ** изящно ** прекратить. Конечно, вы можете прекратить/убить поток/процесс, но обычно это не путь. Я не уверен, что Qt предоставляет способ сделать это в интерфейсе, который вы используете. –
@groenhen Чтобы изящно отменить, вам нужно построить эту логику в своей обработке. Например, если алгоритм управляется циклом, каждая итерация цикла может проверить, была ли операция отменена и выйти из цикла (т. Е. Без прохождения всех итераций цикла). –