Russian Qt Forum

Qt => Работа с сетью => Тема начата: Ground от Август 19, 2014, 07:17



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


Название: Re: Обработка данных в отдельном потоке
Отправлено: gil9red от Август 19, 2014, 07:51
Вот в доке пример работы с moveToThread (http://qt-project.org/doc/qt-5/qthread.html#details)


Название: Re: Обработка данных в отдельном потоке
Отправлено: Ground от Август 19, 2014, 08:33
Вот в доке пример работы с moveToThread (http://qt-project.org/doc/qt-5/qthread.html#details)
Примеры тестовые мне понятны. Дело в том, что в них рассматривается, как вынести одиночную тяжелую операцию в другой поток. После завершения операции, поток завершается.
С сетью нюансы в другом - тяжелые операции будут выполняться регулярно, не запускать же каждый раз по потоку.
Как быть в этом случае?


Название: Re: Обработка данных в отдельном потоке
Отправлено: Пантер от Август 19, 2014, 08:44
Создаешь класс, реализуешь в нем функционал, переносишь его в поток, общаешься  с ним сигналами/слотами.


Название: Re: Обработка данных в отдельном потоке
Отправлено: Bepec от Август 19, 2014, 11:42
3 варианта:
1) создаёшь поток, который создаёт UdpSocket и сам с ним общается, операции выполняет и так далее.
2) создаёшь поток - Worker, который имеет доступ к стеку данных. В основном потоке добавляешь в стек данные, доп поток выполняет над ними операции на следующей итерации.
3) на каждую операцию создаёшь поток.