Russian Qt Forum
Июнь 16, 2024, 03:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Многократное выполнение worker'a в QThread  (Прочитано 3335 раз)
voltron
Гость
« : Октябрь 28, 2013, 20:54 »

Хочу реулизовать следующее поведение. Есть длительная операция, которую пользователь может запускать в процессе работы неограниченное число раз, но только в одном экземпляре. Т.е. запустил операцию, получил результат и только потом можно запускать ещё раз с теми же или другими данными.

Реализовать планирую путём создания и вынесения в отдельный поток наследника QObject, который будет заниматься расчетами. Примерно так, как описано здесь. Т.к. выполняться расчеты будут неоднократно, хотелось бы не создавать при каждом нажатии кнопки новые экземпляры worker'а и потока, а создать их единожды, чтобы после окончания вычислений поток переходил в «режим ожидания», а при поступлении сигнала начинал новый расчет.

Можно ли сделать такое и если да, то как? В случае наследования QThread, можно использовать sleep() и флаги, а вот как быть с объектом не очень представляю.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #1 : Октябрь 28, 2013, 21:45 »

А в чем проблемы?
Настроили объект Worker, запустили нить с помощью start. Нужно запустить еще раз - start в помощь. Проверить состояние нити (запущена/нет) можно с помощью специальных флагов.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #2 : Октябрь 28, 2013, 23:30 »

Подумайте не удобнее ли вам будет использовать QtConcurent::run ?
Записан
voltron
Гость
« Ответ #3 : Октябрь 29, 2013, 12:28 »

А в чем проблемы?
Настроили объект Worker, запустили нить с помощью start. Нужно запустить еще раз - start в помощь. Проверить состояние нити (запущена/нет) можно с помощью специальных флагов.
Спасибо. Т.е. я правильно понимаю, что в таком случае сигнал окончания обработки от worker'а должен быть связан со слотом stop() потока, а started() потока — со слотом, запускающим работу worker'a? И аналогично, если у worker'а есть два слота, выполняющих обработку (например, приблизительный и точный расчет), то достаточно по окончании обработки отвязывать сигналы, а при нажатии кнопки соединять сигнал started() с необходимым слотом.

Подумайте не удобнее ли вам будет использовать QtConcurent::run ?
Ммм... не уверен, до этого с QtConcurrent не работал. Посмотрел пример и описание в Assistant'e, немного смущает невозможность информирования о процессе, а так выглядит интересно. Надо будет попробовать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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