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;
}
相关推荐
HugoStudio_SWAN39 分钟前
洛谷 P1319 / P1320 压缩技术——同一枚硬币的正反面
c++·学习·程序人生·算法
小小晓.1 小时前
C++单例模式万字详解:6种实现演进+线程安全彻底解决+CRTP终极模板
c++·单例模式
j7~2 小时前
【C++11】C++11 新特性全套详解(列表初始化、右值引用、lambda 表达式、function 与 bind 包装器等)
c++·右值引用·lambda表达式·可变参数模板·移动语义·包装器·c++11发展史
无小道3 小时前
C/C++——可变参数
c语言·开发语言·c++·可变参数
hele_two3 小时前
C++模拟蚁群(二)
c++·算法·数学建模·图形渲染
WK100%3 小时前
LeetCode双题:滑动窗口破解最小子数组
c++·经验分享·笔记·算法
@福者3 小时前
C++ QT 入门
开发语言·c++·qt
沧海一笑-dj3 小时前
【C++】Visual Studio 2026下载和安装
c++·visual studio·vs·vs2026
长友cy3 小时前
Qt官方示例BluetoothLowEnergyGame源码阅读
开发语言·qt