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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обработка данных в отдельном потоке  (Прочитано 4105 раз)
Ground
Гость
« : Август 19, 2014, 07:17 »

Доброго времени суток!
Необходимо сделать UDP-сервер, который бы обрабатывал получаемые данные в отдельном потоке. Покурил я мануалы, не могу понять технологии работы с потоками в Qt 5.
У меня есть мой класс Network, в нем я создаю QUdpSocket. Сигнал сокета readyRead() о получении новых данных я подключаю к функции в этом же классе.
Как правильно перенести обработку полученных данных в отдельный поток? Раньше просто наследовались от QThread, сейчас, я как понимаю, нужно как-то сделать moveToThread?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Август 19, 2014, 07:51 »

Вот в доке пример работы с moveToThread
Записан

Ground
Гость
« Ответ #2 : Август 19, 2014, 08:33 »

Вот в доке пример работы с moveToThread
Примеры тестовые мне понятны. Дело в том, что в них рассматривается, как вынести одиночную тяжелую операцию в другой поток. После завершения операции, поток завершается.
С сетью нюансы в другом - тяжелые операции будут выполняться регулярно, не запускать же каждый раз по потоку.
Как быть в этом случае?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Август 19, 2014, 08:44 »

Создаешь класс, реализуешь в нем функционал, переносишь его в поток, общаешься  с ним сигналами/слотами.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
« Ответ #4 : Август 19, 2014, 11:42 »

3 варианта:
1) создаёшь поток, который создаёт UdpSocket и сам с ним общается, операции выполняет и так далее.
2) создаёшь поток - Worker, который имеет доступ к стеку данных. В основном потоке добавляешь в стек данные, доп поток выполняет над ними операции на следующей итерации.
3) на каждую операцию создаёшь поток.
« Последнее редактирование: Август 19, 2014, 11:44 от Bepec » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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