Название: Потоки - как , что Отправлено: Antiglobalist от Май 14, 2010, 14:37 Пытался сам разобраться с потоками , но результат был не очень , нуждаюсь в советах.
Есть программа с архитектурой модель-вид-контроллер , которая рисует графики и сохраняет данные в вектор. Я в мэйн файле создаю 3-и объекта (Мод Вид Контр) И прописываю там между ними связи через сигналы и слоты. В моделе есть вектор в который записываются данные. Теперь основное , нужно создать поток в который мы закидываем указатель на вектор и в онлайн режиме должен строиться график по значениям интеграла функций из вектора. ВОт, мне нужна подсказка где его создать и как соединить , пробывал в мeйн файле создавать объект класса Thread, но при задержке(usleep();) вставала вся программа ... В самом потоке создаю объект аналог Вид'а и осуществляю обмен информацией с моделью. Если где-то про это подробно написано , прошу дайте почитать :) Название: Re: Потоки - как , что Отправлено: ритт от Май 14, 2010, 15:59 а поиск по форуму ничего не дал?
Название: Re: Потоки - как , что Отправлено: Antiglobalist от Май 14, 2010, 17:32 А Если в потоке есть цикл , и я вызываю сигнал который принимает слот quit() в потоке , цикл закончит свою работу вместе с потоком или только поток остановится ?
Название: Re: Потоки - как , что Отправлено: ритт от Май 14, 2010, 18:58 судя по документации (и, тем более, по коду), произойдёт выход из всех экземпляров QEventLoop данного потока, что обычно означает и останов самого потока.
Название: Re: Потоки - как , что Отправлено: Igors от Май 14, 2010, 20:09 В любом случае нитка запускается методом start() завершается когда выходит из своего метода run(). Широко применяются 2 политики:
1) Перекрыть run() для выполнения конкретной задачи (обычно одной). Как прервать нитку в данном случае, дождаться ее завершения и.т.п - см. по форуму, обсуждалось неск. раз недавно. 2) По умолчанию) run() вызывает exec(), нитка входит в свой eventLoop Она будет что-то делать когда получит сигнал (event) из другой. Вызов quit() закончит eventLoop, произойдет выхо из run() - нитка завершена. По Вашей задаче (насколько я понял). В самых общих чертах: я бы запускал нитку(и) в начале работы и завершал через quit() при выходе (метод 2). Посылал бы ей сигнал "вычислить график". Напр. с параметром "указатель на контейнер". Нитка посчитала, заполнила контейнер и отсигналила "готово" - главная рисует результаты в UI. Проще создать коннекты сигналов с типом QueuedConnection |