关于这个qt的udp通信的丢包的对策?

ReceiveThread::ReceiveThread(QQueue<char *>&  q):queue(q)
{
}

void ReceiveThread::run()
{
    char *p;
    while(true)
    {
        MyUdpSocket &usock=MyUdpSocket::getInstance();
        bool b=false;
        while(usock.hasPendingDatagrams())
        {
            b=true;
            p=new char[165];
            usock.readDatagram(p,165);
            queue.push_back(p);
        }
        if(b)
            emit this->complete();
    }


}

因为qudpsocket丢包,所以我把接收udp报文的部分单拿出来作了个线程.
这个线程的内容就是,把数据接收,然后丢进一个QQueue类对象里,发出complete信号.
主页面会连接这个信号,启动某个槽函数从队列里取出字符串进行处理.
....但这个线程依然保持10个包丢1个的丢包率,还有哪些部分可以改良吗?

阅读 1k
1 个回答
✓ 已被采纳
  • MyUdpSocket::getInstance() & usock & queue不是线程安全。
  • while(true) 建议加入 sleep
  • QUdpSocket 本身有 readyRead() 信号,你只需要将连接到数据处理槽即可,不必再加接口。
  • UDP 本身确实会丢包,可以考虑 RUDP 库。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题