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

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

13.02.2015, 18:41. Показов 5152. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru