我用的是QT5自带的QSerialport类
串口的另一端一个采集仪,它检测到开/关门事件就发给我19个字节的数据
问题是:偶尔有时候一次读到的数据为什么不足19个字节,而且在下次开/关门事件触发之前根本就读不出来那些没读到的数据,下次开/关门的时候,上次没读完的数据又读了出来
我总怀疑QT5的串口有bug,哪位高手帮我看看是不是我的代码写的有问题
读取串口代码如下(放在一个线程里不停的循环读取,mysp是一个QSerialport对象)
void mythread4::run()
{
while(this->stoped==false)
{
if(mysp->waitForReadyRead(-1)) //等待有数据到达,-1表示永不超时
{
this->msleep(150); //延时一会,等待数据全部到达
QByteArray b=mysp->readAll();
for(int i=0;i<b.count();i++)
{
qDebug()<<QString::number(b[i]); //调试输出读到的数据
}
}
}
}
------解决思路----------------------
你可以试试它的异步API,使用信号槽。这样也可以避免多线程
------解决思路----------------------
使用信号和槽比较简单,有一个非官方的串口操作类 qextserialport ,也很好用
------解决思路----------------------
这个问题的话,你倒是可以试试QextSerialPort 1.2RC。
如果用QextSerialPort正常的话,你可以去给QtSerialPort提交一个BUG