QUdpSocket и QThread

Насколько я понимаю из документации, QUdpSocket является асинхронным, но, тем не менее, чтение из сокета выполняется в потоке пользовательского интерфейса, когда испускается сигнал readyRead(). Это правильно? Безопасно ли это с точки зрения производительности? Должен ли я читать содержимое сокета в другом потоке?


person Blackbelt    schedule 21.06.2012    source источник


Ответы (1)


Все зависит от того, будет ли у вас много данных для обработки. Я использовал сокет TCP со средней передачей ~ 20 Мбит / с без блокировки графического интерфейса. Лучше всего было бы проверить это самостоятельно. Я думаю, вам не придется перемещать сокет в другой поток

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