QEventLoop loop配合loop.exec();替代while(1)。电脑cpu占用为0,使用while(1)cpu占用率100%

断点调试
没有readyRead信号的时候,断点阻塞在loop.exec();
有readyRead信号的时候,断点跳入 while(udp->hasPendingDatagrams())。
如此反复

子线使用udp,参考写法

c 复制代码
void DeviceBase::run()
{
    QUdpSocket* udp = new QUdpSocket(nullptr);
    QEventLoop loop;

    //1.先connect
    connect(udp, &QUdpSocket::readyRead, this, [=](){
        while(udp->hasPendingDatagrams())
        {
            QByteArray pkg = udp->receiveDatagram().data();
            qDebug()<<"收到数据:"<<pkg.toHex();
            //DevStatus st = getStatus(pkg);
            //emit devStatusUpdate(st);
        }
    });

    connect(this,&DeviceBase::stopThread,&loop,&QEventLoop::quit);

    //2.再bind!!bind一定要在connect之后
    if(!udp->bind(QHostAddress::Any,60000))
    {
        qWarning()<<"UDP绑定失败:"<<udp->errorString();
        delete udp;
        return;
    }

    loop.exec();

    udp->close();
    delete udp;
}
相关推荐
今天要早睡_14 小时前
C++01_入门基础复习
开发语言·c++
Fuyo_111917 小时前
C++ 运行时多态与虚函数机制全面剖析【面试重点】
开发语言·c++·面试
Chen_harmony18 小时前
七、STL与string类
开发语言·c++
xxxiugou12319 小时前
C++命名空间与引用全解析
开发语言·c++
BroNekoX19 小时前
我将基于 QtQuick 框架开发的音乐播放器性能做到顶级
qt
用户76241175670520 小时前
第十五章 人工智能基础
c++
爱写Bug的浮游1 天前
unique_ptr 零开销的真相与边界
c++·facebook
xiaoye-duck1 天前
《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(下):流式响应实现和测试
网络·c++·语言模型·chatgpt
小小晓.1 天前
Qt 对话框、QLineEdit 与布局管理实战详解
开发语言·qt
落樱弥城1 天前
Perf 逐步探查性能缺口并优化
c++·性能优化