Russian Qt Forum
Ноябрь 25, 2024, 14:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не могу никак с потоками разобратся хэлп.  (Прочитано 2381 раз)
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", т.е. получается что я его прибил но он все равно выполняется ?

Что делать ?

Если нужно могу привести пример того что у меня не получается может что то можно сделать ?
Записан
niXman
Гость
« Ответ #1 : Февраль 17, 2010, 16:42 »

Цитировать
Что делать ?
для начала, покажи что у тебя в run()
Записан
Akaiten
Гость
« Ответ #2 : Февраль 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)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.1 секунд. Запросов: 21.