Название: [решено] Ещё раз об остановке потока Отправлено: serg_hd от Апрель 21, 2010, 21:27 Не могу корректно завершить выполнение потока.
Метод run() класса-наследника QThread: Код т.е. цикл в нём бесконечный и с помощью suspendFlag контролируется выполнение действий. Проблема в том, что при завершении работы программы имею "QThread: Destroyed while thread is still running". Деструктор этого класса Код показывает всегда Код Вместо quit() пробовал кучу других вариантов (ставить wait() перед ним тоже - плюс к тому предупреждению дополнительно выдаёт "QThread::wait: Thread tried to wait on itself"), эффекта 0. Есть ли ещё варианты? Название: Re: Ещё раз об остановке потока Отправлено: niXman от Апрель 21, 2010, 21:28 это нужно еще уметь так извращаться ;D
Название: Re: Ещё раз об остановке потока Отправлено: serg_hd от Апрель 21, 2010, 21:31 это нужно еще уметь так извращаться ;D как "так"? Я вообще многое умею ;)Название: Re: Ещё раз об остановке потока Отправлено: niXman от Апрель 21, 2010, 21:34 Код
где только этот вопрос не поднимался. сколько сотен тем было создано... и везде один и тот же ответ - единственно правильный способ завершения потока, это вернуться из него. Название: Re: Ещё раз об остановке потока Отправлено: niXman от Апрель 21, 2010, 21:38 Цитировать и везде один и тот же ответ - единственно правильный способ завершения потока, это вернуться из него. еще нужно понимать, что такое поток. и знать, что это "system dependent".Название: Re: Ещё раз об остановке потока Отправлено: serg_hd от Апрель 21, 2010, 21:57 Пересмотрел тут тем 6 с этой же проблемой, но такого решения (завершать его исключительно возвратом) не было, так что спс
Изменил деструктор на: Код пошло Название: Re: Ещё раз об остановке потока Отправлено: Igors от Апрель 21, 2010, 21:59 Код
Вызывающий Код
Название: Re: Ещё раз об остановке потока Отправлено: alexman от Апрель 22, 2010, 08:40 Код
Вызывающий Код
Название: Re: [решено] Ещё раз об остановке потока Отправлено: niXman от Апрель 22, 2010, 08:50 Цитировать mStop не нужно мьютексом "закрыть"? нет. с однобайтовыми переменными, операции атомарны. по крайней мере на известных мне аппаратных архитектурах.Название: Re: [решено] Ещё раз об остановке потока Отправлено: alexman от Апрель 22, 2010, 08:52 спс, понял!
Название: Re: Ещё раз об остановке потока Отправлено: ieroglif от Апрель 22, 2010, 10:32 Код
Вызывающий Код
Код
Название: Re: Ещё раз об остановке потока Отправлено: BRE от Апрель 22, 2010, 10:42 эээ.. а не лучше ли ? Момент, когда объект theThread будет разрушен от него самого не зависит и легко может случиться так, что он будет разрушаться при работающей нитке. Поэтому, желательно использовать wait.Код
Либо использовать сигнал finished: connect( theThread, SIGNAL( finished() ), theThread, SLOT( deleteLater() ) ); |