Название: Принудительно завершить поток [РЕШЕНО] Отправлено: TheMixa от Сентябрь 03, 2010, 14:45 Как принудительно завершить поток?
Запускаю start(), в run несколько долгих циклов. Если допустим надо принудительно завершить пототок раньше времени то вызов longprocess.exit(), longprocess.quit(), longprocess.terminate() нидают никакого эффекта. Название: Re: Принудительно завершить поток Отправлено: RedDog от Сентябрь 03, 2010, 15:04 Код: QThread::setTerminationEnabled(true); Название: Re: Принудительно завершить поток Отправлено: TheMixa от Сентябрь 03, 2010, 15:07 да стоит enable в конструкторе, более того в циклах на операциях с файлами и записи в бд я делаю false а на выходе опять true но ему пофиг.
Название: Re: Принудительно завершить поток Отправлено: kuzulis от Сентябрь 03, 2010, 16:01 Самое лучше завершение - это когда поток завершается сам!
В методе run в циклах проверяйте некий флаг, который говорил бы потоку завершиться! Наример: Код:
Название: Re: Принудительно завершить поток Отправлено: TheMixa от Сентябрь 03, 2010, 16:09 ну о подобном я думал, но всетаки хочется иметь аварийное завершение на случай если алгоритм выйдет из под контроля. Не могу же я каждый чих проверять? производительность упатед вразы тогда.
Название: Re: Принудительно завершить поток Отправлено: Igors от Сентябрь 03, 2010, 17:51 ну о подобном я думал, но всетаки хочется иметь аварийное завершение на случай если алгоритм выйдет из под контроля. Не могу же я каждый чих проверять? производительность упатед вразы тогда. 1) Всем сначала хочется :) Но помыкавшись приходят к тому же: нитка должна завершиться сама 2) Обязаны проверять 3) Проверка как показал kuzulis не съедает даже 0.01% Название: Re: Принудительно завершить поток Отправлено: TheMixa от Сентябрь 05, 2010, 09:37 ну походе таки и придется делать, просто итерации цикла очень долго может выполняться поэтому внтури цикла необходимо делать контрольные проверки тоже
Название: Re: Принудительно завершить поток Отправлено: TheMixa от Сентябрь 05, 2010, 11:43 забавно но что-то не так в датском королевстве
Код: void longprocess::run() так вот если run запущен то после stop в run() needStop так и остается false. и какой выход остается? в public parent пренести needstop? Название: Re: Принудительно завершить поток Отправлено: Igors от Сентябрь 05, 2010, 12:04 Не пойму зачем писать
Код: if (needStop == true) Название: Re: Принудительно завершить поток Отправлено: BRE от Сентябрь 05, 2010, 12:21 так вот если run запущен то после stop в run() needStop так и остается false. и какой выход остается? в public parent пренести needstop? Код
Название: Re: Принудительно завершить поток Отправлено: TheMixa от Сентябрь 06, 2010, 10:40 сегодня посмотрел код свежей головой, ошибка была совсем не в потоке (if(messagebox==cancel) stop; а я упорно жал ОК), но зато полностью переписал и привел к читаемому виду.
|