

断点调试
没有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;
}