• 3308阅读
  • 1回复

[提问]QByteArray奇怪的现象, 求各位帮忙看看为什么 [复制链接]

上一主题 下一主题
离线ysu533
 

只看楼主 倒序阅读 楼主  发表于: 2013-01-29

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存放图片数据用在函数中传递, 出现过类似问题, 求解
离线ysu533

只看该作者 1楼 发表于: 2013-01-29
已解决, 隐式共享的原因
快速回复
限100 字节
 
上一个 下一个