QT串行丢弃数据

时间:2017-01-04 19:11:59

标签: c++ qt

我已经在这里看了几个关于这个主题的问题,但没有什么能为我提供解决方案。

通过VM进行测试,我的传入数据长度为47,80或31个字符。

串口的readyRead连接到:

void MainWindow::readData(){
    QString buf; 
    myByteArray = serial->readAll();
    for(int i = 0; i < myByteArray.size(); ++i){
        if(myByteArray.at(i) == '\n'){
            buf.append(myByteArray.at(i));
            qDebug() << buf << endl;
            buf.clear();
        else{
            buf.append(myByteArray.at(i)); 
        }

我知道每条消息的结尾都是&#34; \ r \ n&#34;所以我们用它来结束当前的消息。

我遇到的问题是,我每50岁时可能会得到一条干净的信息。这是左右两边的字符。我有一个文本文件显示通过串口发送的消息,这样我就可以与收到的内容进行比较,并且令人厌恶它们是多么令人厌恶。

我已尝试过readLine()以及其他线程中的其他一些建议,但结果总是相同。

我的想法是检查收到的消息是否符合我期望的长度,47,80或31个字符,然后忽略那些不匹配的消息。这个问题是我每隔2分钟就会得到一条真正干净的信息......也许吧。

如果我在收到电报后立即将电话丢失,结果与我缓冲数据的结果没什么不同。

我收到的另一个问题是我收到的每条消息,我总共想念3-4个。

有关如何更好地处理此问题的任何建议吗?

1 个答案:

答案 0 :(得分:1)

readAll返回当前可用的内容。无法保证已收到所有数据。我的猜测是,当你拨打电话时,你的数据仍在转移。

您需要阅读数据,直到收到\r\n

根据您的需求,您可能会发现readLine更易于使用。