Решил на досуге побаловаться с PyQt и внезапно обнаружил своё непонимание некоторых концептуальных вещей.
Есть банальная ситуация: кнопочка запускает поток, в котором начинает крутиться одна единственная "тяжёлая" функция. По другой кнопочке её выполнение должно прерваться.
Способ с очередью сообщений и quit() вроде бы не подходит, потому как exec() занимает основной поток управления, а функция как бы тоже должна где-то крутиться...
Решил попробовать сделать влоб - terminate(). В 80% случаев оно работает, но в оставшихся 20% - интерфейс становится неотзывчивым и складывается впечатление, что ломается основная очередь событий приложения. Ну ладно, в документации и написано, что использование этой функции крайне не рекомендуется.
Сначала погрешил на биндинг, но, попробовав переписать на C++, с удивлением обнаружил схожее поведение. Забавно, что под Windows terminate() иногда вообще не срабатывает и поток продолжает выполняться даже после её вызова (но это только с PyQt, на плюсах на проверял).
А вопрос собственно такой: как вообще по-человечески можно решить подобную задачу? Заранее благодарен.
P.S. Ах да, забыл сказать, что QtConcurrent в PyQt ещё не обернули.