3 / 3 / 0
Регистрация: 20.01.2015
Сообщений: 47
|
||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||
Разделение на потоки. запрос-ответ04.11.2019, 16:10. Показов 1746. Ответов 26
Метки нет (Все метки)
Реализовал класс в отдельном потоке
класс-работяга
Но делается это все для связи с прибором. Прибор может отвечать долго, т.к. измеряет (до 30 мин). Как правильно общаться с классом worker (он же класс прибора) так, чтобы из MainWindow вызвать одну функцию measure, а внутри этой функции выполнился запрос к прибору на измерение и ожидание ответа? При этом чтобы GUI не зависал примерно так
0
|
04.11.2019, 16:10 | |
Ответы с готовыми решениями:
26
Epoll разделение на потоки Разделение на потоки работы с sfml Разделение разбора xml-файла и обработка полученных данных на независимые потоки Python socket telnet, потоки и ответ сервера |
фрилансер
5503 / 5098 / 1048
Регистрация: 11.10.2019
Сообщений: 13,360
|
||||||
04.11.2019, 16:39 | 2 | |||||
ni_ko, я вот так обычно делаю
0
|
04.11.2019, 18:38 | 3 | |||||
ni_ko, Зависит от того что внутри ф-ции.
Добавлено через 1 минуту Но судя по Короткий ответ по предоставленной инфе - никак! Добавлено через 1 минуту
0
|
04.11.2019, 21:03 | 4 |
Поддерживаю. Создал объект, переместил его в QThread (через moveToThread), соединил сигнал started QThread со слотом объекта и вызвал start для QThread. Стандартный прием.
0
|
3 / 3 / 0
Регистрация: 20.01.2015
Сообщений: 47
|
|
05.11.2019, 10:13 [ТС] | 5 |
Добавлено через 2 минуты Или при moveToThread проихойдет то же самое? Добавлено через 1 минуту Т.е. единственное решение - это в GUI запоминать, что мы ждем ответа от worker и когда он пришел сбрасывать состояние ожидания?
0
|
05.11.2019, 13:08 | 7 |
То же самое, главное правильно внутри работяги создавать объекты.
(желательно создавать объекты с лотах, а не в конструкторе работяги, так как конструктор выполнятся будет не в "самом потоке" а в месте создания.)
0
|
3 / 3 / 0
Регистрация: 20.01.2015
Сообщений: 47
|
|||||||||||
09.11.2019, 17:38 [ТС] | 8 | ||||||||||
Как и советовали, избавился от переопределения run
Теперь реализую в WorkThread функцию подключения к железке. Есть 2 варианта (показаны не полные функции, только суть):
Пока реализовал 2 способ, чтобы не плодить сигналов. Насколько это правильно? И как лучше?
0
|
3 / 3 / 0
Регистрация: 20.01.2015
Сообщений: 47
|
||||||
09.11.2019, 19:12 [ТС] | 11 | |||||
железок будет несколько. Одновременно общение только с одной. Принцип общения одинаковый, но разные протоколы. Пока отрабатываю на одной. Потом будет для каждой свой набор классов worker-controller со своими особенностями
0
|
3 / 3 / 0
Регистрация: 20.01.2015
Сообщений: 47
|
|
09.11.2019, 19:20 [ТС] | 13 |
мне так удобнее
0
|
09.11.2019, 19:40 | 15 |
ni_ko, пара советов.
1. Локальную переменную m_thread сделайте полем класса, иначе по выходу из блока она будет уничтожена. 2. У вас, я так понимаю, есть обертка, которая уже создает потоки и в них помещает объекты. В ней есть необходимость? Возможно, проще непосредственно в GUI создавать объект-измеритель, двигать его в поток и пусть работает. Но вам виднее. 3. Тут вообще очень удобно, делаете базовый класс со всеми необходимыми сигналами, а потом под каждый протокол создаете наследника. Ну и класс-фабрику, создающий указатель на нужный тип и присваивающий его указателю на базовый. Недавно реализовывал нечто подобное, с применением шаблона Template Method. Очень удобный прием, на мой взгляд. В базовом классе только один реализованный слот, в котором вызываются другие функции (чисто виртуальные). И эти чисто виртуальные функции реализуются в наследниках. По указателю типа базового класса вызывается этот слот, а он уже вызывает чисто виртуальные функции (которые в каждом наследнике реализованы по разному). Если надо, могу привести демонстрационный код такого приема.
0
|
3 / 3 / 0
Регистрация: 20.01.2015
Сообщений: 47
|
|
09.11.2019, 20:44 [ТС] | 16 |
0
|
09.11.2019, 21:47 | 18 |
Разберется, постепенно. Сюда код вставлять долго, я ему сейчас примерный каркас накидаю (один абстрактный класс работника и пара наследников), ну и простой виджет для демонстрации. А дальше пускай настраивает под свою логику работы.
0
|
1352 / 851 / 365
Регистрация: 26.02.2015
Сообщений: 3,799
|
|
10.11.2019, 20:09 | 20 |
0
|
10.11.2019, 20:09 | |
10.11.2019, 20:09 | |
Помогаю со студенческими работами здесь
20
Почему ответ на GET запрос из Python отличается от ответа на GET запрос из HTTP Analyzer Запрос и разделение записей Ответ на Get запрос Ответ на запрос Ответ на запрос Ответ на запрос Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |