QSerialPort readLine () im Vergleich zu readAll () extrem langsam

Die Daten, die ich von einem seriellen Port (in Qt mit QtSerialPort / QSerialPort) lese, werden durch die Zeilenumbrüche '\ n' und '\ r' getrennt. Die Zeilenlänge mag sehr sein, aber es ist sehr einfach, die Daten aus dem Format jeder Zeile zu extrahieren.

//signal/slot connection on readyRead() is as follows:
connect(serial, SIGNAL(readyRead()), this, SLOT(readData()));

Dabei ist readData () wie folgt definiert:

void MainWindow::readData()
{
   //As mentioned below, which I will reiterate, I have already tried the addition of 
   // canReadLine():
   if (serial->canReadLine()){
     QByteArray data = serial->readLine();
     //QByteArray allData = serial->readAll();
     parseSerialBytes(data);
     //console->putData(data);
     //console->putData(alldata);
   }
}

DieQIODevice::readLine() Funktion istextrem langsam und deutlich blockierend, dass Daten im Vergleich zu QIODevice :: readAll () nicht mit voller Frequenz empfangen werden

Kann mir bitte jemand erklären, wie man das richtig benutztreadLine() Funktion, damit ich nicht durchschleifen mussreadAll() in dieQByteArray jede Zeile zu analysieren? Ich habe das "Terminal" Qt Widgets-Beispiel verwendet, um diese asynchrone Serialport-Lesefunktion zu erstellen.

Vielen Dank im Voraus - dies scheint ein häufiges Problem zu sein, das ich hier noch nicht beantwortet gesehen habe.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage