Насколько я понимаю из документации, QUdpSocket является асинхронным, но, тем не менее, чтение из сокета выполняется в потоке пользовательского интерфейса, когда испускается сигнал readyRead(). Это правильно? Безопасно ли это с точки зрения производительности? Должен ли я читать содержимое сокета в другом потоке?
QUdpSocket и QThread
Ответы (1)
Все зависит от того, будет ли у вас много данных для обработки. Я использовал сокет TCP со средней передачей ~ 20 Мбит / с без блокировки графического интерфейса. Лучше всего было бы проверить это самостоятельно. Я думаю, вам не придется перемещать сокет в другой поток
person
Kamil Klimek
schedule
21.06.2012
Я понимаю. Итак, по вашему мнению, когда возникает сигнал readyRead (), является ли поток пользовательского интерфейса/основной для выполнения тела слота?
- person Blackbelt; 21.06.2012
Он будет обработан в потоке пользовательского интерфейса, если объект будет построен в этом потоке. Но, как я уже сказал, вам придется проверить, не занимает ли ваш слот обработки слишком много.
- person Kamil Klimek; 21.06.2012
Нет, это не требует много времени, но, тем не менее, я был бы более счастлив, если бы смог обработать это в другом потоке. Если я перемещу объект сокета в этом потоке, я получу сигнал readData?
- person Blackbelt; 21.06.2012
помните, что простое добавление потоков иногда не ускоряет работу вашей программы. Синхронизация потоков иногда может занимать больше времени, чем сама обработка данных.
- person Kamil Klimek; 21.06.2012