Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/22: Рейтинг темы: голосов - 22, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 13.02.2015
Сообщений: 17

Многопоточное приложение и взаимодействие между потоками

13.02.2015, 18:41. Показов 5237. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Подскажите, пожалуйста, как в Qt сделать 3-х поточного клиента, один поток которого отвечает за чтение сообщений от сервера, второй за отправку пакетов серверу, третий за GUI. Вопросов, собственно, два:
1) как сделать так, чтобы "читающий" поток не закрывался после приема пакета, а "висел"?
2) сокет создается и подключается в основном потоке, а записать в него данные нужно из другого потока, при этом возникает ошибка, как ее убрать, не знаю.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.02.2015, 18:41
Ответы с готовыми решениями:

Разработать многопоточное Win32-приложение, которое использует диалоговое окно для управления потоками процессов
Разработать многопоточное Win32-приложение, которое использует диалоговое окно для управления потоками процессов. Приложение должно...

Взаимодействие между потоками
Мне надо чтоб 1 поток перебирал числа из файла и , которые кратны 17, передавать второму потоку, который просто накапливает эти числа и...

Взаимодействие между потоками
Привет. Есть класс А, который содержит не статические методы, которые можно вызвать лишь с главного потока. И есть класс Б, который...

26
0 / 0 / 0
Регистрация: 13.02.2015
Сообщений: 17
15.02.2015, 23:10  [ТС]
Студворк — интернет-сервис помощи студентам
MyThread thr-создается в главном потоке, а сокет- создается в отдельном потоке. Я проверял QObject::thread().
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.02.2015, 23:19
Сокет тут пока не причем.
C++ (Qt)
1
connect(pcmd, SIGNAL(clicked()),&thr, SLOT(write_in_socket()));
Ты связываешь кнопку с сигналом MyThread, они находятся в одном потоке, и автоматически свяжутся "напрямую" и при этом
write_in_socket() будет вызван тоже в основном потоке, в то время как твой сокет создан в run() и будет "принадлежать" другому потоку - а соответственно будет лажа.

Нельзя такие объекты создавать в одном потоке, а вызывать их методы в другом.

QThread- Тут первые два примера демонстрируют два разных подхода к использованию QThread
тебе больше подходит пример с применением "class Worker"
0
0 / 0 / 0
Регистрация: 13.02.2015
Сообщений: 17
15.02.2015, 23:21  [ТС]
А если создать класс работы с сокетом, и переместить его в другой поток?

Вашу тему читаю, пока не все понятно.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.02.2015, 23:25
Цитата Сообщение от frf Посмотреть сообщение
А если создать класс работы с сокетом, и переместить его в другой поток?
Ну если создать класс Worker содержащий cокет и переместить его в QThread, и связать кнопку с слотом Worker то да свяжется все нормально (так как автоматически определится что они в разных потоках)
0
0 / 0 / 0
Регистрация: 13.02.2015
Сообщений: 17
15.02.2015, 23:30  [ТС]
Я так понимаю, по-другому и не получится?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.02.2015, 23:39
Лучший ответ Сообщение было отмечено frf как решение

Решение

Цитата Сообщение от Avazart Посмотреть сообщение
Ты связываешь кнопку с сигналом MyThread,
Поправка: сигнал кнопки со слотом MyThread

Добавлено через 1 минуту
Цитата Сообщение от frf Посмотреть сообщение
Я так понимаю, по-другому и не получится?
Может и получится как то иначе, но лучше именно так как я описал.

Worker - это как бы класс-приемник благодаря которому удается принимать сообщения из основного потока, и обрабатывать их.
1
0 / 0 / 0
Регистрация: 13.02.2015
Сообщений: 17
15.02.2015, 23:50  [ТС]
Ладно, буду переделывать. Спасибо вам за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.02.2015, 23:50

Взаимодействие между потоками
В ходе выполнения программы необходимо, чтобы определенные действия выполнялись в отдельном потоке (дабы программа не подвисала), и по мере...

Взаимодействие между потоками и зсувками
Написать параллельную программу с общей переменной типа integer и двумя рабочими процессами. Всеобщей переменные в начале работы программы...

Взаимодействие с потоками
Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток." как эту...

Многопоточное приложение
Возник вопрос по поводу работы с паралельно запускающимися потоками. Есть ли метод который бы четко задавал работу одного потока? Типа...

Многопоточное приложение
Требуется разработать многопоточное приложение (в качестве средства разработки следует использовать Microsoft Visual Studio). Приложение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru