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;
}
相关推荐
WL学习笔记7 小时前
C & C++ 内存管理
c++·c++内存管理
用户8334423966148 小时前
从批量操作到任务中心,再到现场工作台:DeviceForge v2.10—v2.12 完整演进
qt
宛 禾10 小时前
Qt 控件入门:QLabel 从拖拽到对象树,一篇讲透
c++·qt·学习
hetao173383710 小时前
联盟场-提高组-R7 & ZYZSC-S-Round 11
c++·算法
程序喵大人10 小时前
【C++入门】编译链接模型 - 07 链接器怎样把符号对上号
开发语言·c++·编译器·编译链接·链接器
局部有解10 小时前
Hot100 - 三数之和
数据结构·c++·算法
longlongzihan11 小时前
C++ 常用数据结构速查:vector、stack、queue、list、树、图、哈希表等声明与核心操作
数据结构·c++·list
别动我齐刘海11 小时前
实时控制学习2
linux·c++·人工智能·学习·算法
hetao173383712 小时前
校内场-提高组 ZYZSC-S-Round 2
c++·算法
hetao173383713 小时前
2026-10-14 hetao1733837 的刷题记录
c++·算法