QUdpSocket Высокая скорость чтения сообщений

все!

У меня странная проблема в работе с QUdpSocket и сигналом readyRead, я могу сказать, что он не работает, как я думаю,

Я создаю QUdpSocket и привязываю его к некоторому порту, подключаю сигнал readyRead к моему слоту и читаю все ожидающие дейтаграммы, как показано ниже

if(!udp_listener)
{
udp_listener = new QUdpSocket(this);
connect(udp_listener, SiGNAL(readyRead()), this, SLOT(readBuffers(), Qt::QueuedConnection);
// the rate of receiving data is 10 msec if i dont put Qt::QueuedConnection, it didn't receive any more signal after first received. why ???
// change the rate of data to 1 sec and this code work well without Qt::QueuedConnection !!!
}

udp_lister.bind(Any, 5555);

и мой код readBuffers

void readBuffers() {
QString buffer;
while(udp_listener->hasPendingDatagrams()) {
QByteArray received;
received.resize(udp_listener->pendingDatagramSize());
udp_listener->readDatagram(received, received.size(), 0,0);
buffer.append(received);
// Do some job in 1 msec on buffer and take data from buffer
if(/* some works done */) buffer.clear(); // almost every time my buffer got cleared
}
}

Я думал, что мои проблемы решены с помощью Qt :: QueuedConnection, но сегодня я добавляю другой виджет в свой проект и обновляю его каждые 100 мсек. Я не знаю как, но мой слот больше не сигнализировал через 2 секунды.

Если я изменил свой интервал таймера или скорость передачи данных на 1 сек, все в порядке.

все мои классы и мои виджеты живут в потоке основной программы, и я не использую другой поток, но, похоже, я должен!

так почему сигналы сбрасываются Qt eventloop?

Я проверяю состояние моего сокета, и оно не изменилось после Bound.

заранее спасибо

0

Решение

Qt :: QueuedConnection сообщает сигналу, который нужно добавить в очередь, не дожидаясь его обработки, прежде чем продолжить.
Если работа, которую вы выполняете над полученными данными, занимает некоторое время, возможно, скорость отправки слишком велика, чем скорость чтения, что приводит к большой очереди сигналов, поэтому система qt блокирует сигнал?

У меня нет времени на его тестирование, но то, что вы говорите об изменении таймера скорости передачи данных, заставляет меня думать, что это может быть что-то подобное.

Возможно, попробуйте измерить время, необходимое для обработки ваших данных, и попробуйте разные длины таймера отправки, чтобы проверить, можете ли вы проверить эту идею.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]