Как прекратить QThread? - PullRequest
       8

Как прекратить QThread?

1 голос
/ 24 августа 2009

QThread::terminate() документация гласит, что не рекомендуется завершать поток, вызывая эту функцию.
В моей программе мне нужно завершить поток, прежде чем он завершит выполнение. Поток выполняет тяжелые вычисления, и я хочу, чтобы у пользователя был контроль, чтобы остановить вычисления.
Как я могу это сделать вместо звонка QThread::terminate()?

Ответы [ 3 ]

10 голосов
/ 24 августа 2009

Установите флаг извне потока, который проверяется вычислениями в потоке, и остановите вычисление, если флаг установлен.

1 голос
/ 26 апреля 2011

Лучше всего использовать флаг + мьютекс, который сделает поток решения безопасным.

1 голос
/ 24 августа 2009

Использование флагов - очевидный и самый распространенный способ добиться цели, но если вы работаете на платформе linux / unix, я бы посоветовал вам использовать каналы. У меня была та же проблема, когда я использовал флаг (это делает код не защищенным от потоков, и ошибки, возникающие из-за такого флага, трудно отследить), затем я изменил реализацию, чтобы использовать каналы, которые были эффективным способом сделать все необходимое.

Если хотите, для платформы linux я могу показать вам, как использовать каналы для завершения QThread.

У вас также может быть Windows-эквивалент труб, о котором я мало что знаю, так как я мало занимался программированием на платформе Windows.

Надеюсь, это поможет

...