void CSerialPort::doRead()
{
if(_status == 0) {
_data = readFromCom();
if(!_data.isEmpty()) {
QueryPerformanceCounter(&(_oldtick));
qDebug() << "read" << _data.toHex();
_status = 1;
}
} else if(_status == 1) {
QByteArray ba = readFromCom();
qDebug() << "isTimeOUt" << _data.toHex() << ba.toHex();
if(ba.isEmpty()) {
if(isCharTimeout()) {
emit dataReady(_data);
_status = 0;
}
} else {
_data.append(ba);
qDebug() << "readMode" << _data.toHex();
QueryPerformanceCounter(&(_oldtick));
}
}
}
自己根据论坛上一位朋友的代码改写的串口读写程序, 上面是读一个数据包的代码, 由另一个线程调用, 打印出来的结果如下
read "0000" //1
isTimeOUt "0000" ""
isTimeOUt "0000" ""
isTimeOUt "0000" ""
isTimeOUt "0000" ""
isTimeOUt "0000" ""
isTimeOUt "01a0" "01a0" // 2
readMode "01a001a0"
isTimeOUt "01a001a0" ""
isTimeOUt "01a001a0" ""
isTimeOUt "01a001a0" ""
isTimeOUt "01a001a0" ""
isTimeOUt "01a001a0" ""
isTimeOUt "01a001a0" ""
isTimeOUt "01a001a0" ""
isTimeOUt "01a001a0" ""
其中标2的地方 _data的数据被覆盖了, 为什么会被覆盖? 其中的_data只在这一个函数调用了, 不是每次都覆盖, 有的正常有的覆盖了, 这个问题在一次用QByteArray存放图片数据用在函数中传递, 出现过类似问题, 求解