Название: Не могу никак с потоками разобратся хэлп. Отправлено: AntonUfo от Февраль 17, 2010, 15:51 Вопрос такой, к примеру есть вот такая конструкция:
Приложение -> запускает поток -> который в свою очередь запускает еще один поток с расчетами на 2 часа. Когда мне необходимо остановить расчеты я нажимаю кнопку. В книге Бланшет, Саммерфилд приводят вот такое решение: В потоковых классах вводится приватная переменная volatile bool stopped; которая меняется в соответствующем методе void stop();, переопределенный метод QTread::run(); выполняется до тех пор пока stopped = true, как только false заканчиваем выполнение run потока, поток закрываем. Но честно говоря пользоваться такой конструкцией неудобно, приходится тащить volatile bool stopped и void stop(); во все функции и методы которые используются при расчетах Я пытался останавливать поток с расчетами через terminated();, через quit();, вроде бы он прибивается вот только на загрузку процессора смотрю она как была 100% так и осталась, и дебагг пишет "QTread: Destroyed while tread is stil running", т.е. получается что я его прибил но он все равно выполняется ? Что делать ? Если нужно могу привести пример того что у меня не получается может что то можно сделать ? Название: Re: Не могу никак с потоками разобратся хэлп. Отправлено: niXman от Февраль 17, 2010, 16:42 Цитировать Что делать ? для начала, покажи что у тебя в run()Название: Re: Не могу никак с потоками разобратся хэлп. Отправлено: Akaiten от Февраль 17, 2010, 17:45 В потоковых классах вводится приватная переменная volatile bool stopped; которая меняется в соответствующем методе void stop();, правильнопереопределенный метод QTread::run(); выполняется до тех пор пока stopped = true, как только false заканчиваем выполнение run потока, поток закрываем. Но честно говоря пользоваться такой конструкцией неудобно, приходится тащить volatile bool stopped и void stop(); во все функции и методы которые используются при расчетах может быть проверять stopped только в некоторых контрольных точках, чтобы уменьшить количество мест проверкиЯ пытался останавливать поток с расчетами через terminated();, через quit();, вроде бы он прибивается вот только на загрузку процессора смотрю она как была 100% так и осталась, и дебагг пишет "QTread: Destroyed while tread is stil running", т.е. получается что я его прибил но он все равно выполняется ? QThread::terminate() должно работать, под виндой по крайней мере работает. Если не работает, попробуйте QThread::setTerminationEnabled(true) |