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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Потоки - как , что  (Прочитано 2666 раз)
Antiglobalist
Гость
« : Май 14, 2010, 14:37 »

Пытался сам разобраться с потоками , но результат был не очень , нуждаюсь в советах.
Есть программа с архитектурой модель-вид-контроллер , которая рисует графики и сохраняет данные в вектор.
Я в мэйн файле создаю 3-и объекта (Мод Вид Контр) И прописываю там между ними связи через сигналы и слоты.
В моделе есть вектор в который записываются данные.

Теперь основное , нужно создать поток в который мы закидываем указатель на вектор и в онлайн режиме должен строиться график по значениям интеграла функций из вектора.
ВОт, мне нужна подсказка где его создать и как соединить , пробывал в мeйн файле создавать объект класса Thread, но при задержке(usleep()Подмигивающий вставала вся программа ...
В самом потоке создаю объект аналог Вид'а и осуществляю обмен информацией с моделью.

Если где-то про это подробно написано , прошу дайте почитать Улыбающийся
Записан
ритт
Гость
« Ответ #1 : Май 14, 2010, 15:59 »

а поиск по форуму ничего не дал?
Записан
Antiglobalist
Гость
« Ответ #2 : Май 14, 2010, 17:32 »

А Если в потоке есть цикл , и я вызываю сигнал который принимает слот quit() в потоке , цикл закончит свою работу вместе с потоком или только поток остановится ?
Записан
ритт
Гость
« Ответ #3 : Май 14, 2010, 18:58 »

судя по документации (и, тем более, по коду), произойдёт выход из всех экземпляров QEventLoop данного потока, что обычно означает и останов самого потока.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Май 14, 2010, 20:09 »

В любом случае нитка запускается методом start() завершается когда выходит из своего метода run(). Широко применяются 2 политики:

1) Перекрыть run() для выполнения конкретной задачи (обычно одной). Как прервать нитку в данном случае, дождаться ее завершения и.т.п - см. по форуму, обсуждалось неск. раз недавно.

2) По умолчанию) run() вызывает exec(), нитка входит в свой eventLoop  Она будет что-то делать когда получит сигнал (event) из другой. Вызов quit() закончит eventLoop, произойдет выхо из run() - нитка завершена.

По Вашей задаче (насколько я понял). В самых общих чертах: я бы запускал нитку(и) в начале работы и завершал через quit() при выходе (метод 2). Посылал бы ей сигнал "вычислить график". Напр. с параметром "указатель на контейнер". Нитка посчитала, заполнила контейнер и отсигналила "готово" - главная рисует результаты в UI. Проще создать коннекты сигналов с типом QueuedConnection
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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