Forum: PC-Programmierung Qextserialport readLine() is langsam


von Stefan R (Gast)


Lesenswert?

1
void Dialog::onReadyRead()
2
{
3
    if (port->canReadLine()) {
4
       //QString recvData=(QString::fromLatin1(port->readAll())); //works fast, but I want to read lines (lf)
5
       QString recvData=(QString::fromLatin1(port->readLine())); //works, but very slow
6
7
       ui->recvEdit->insertPlainText(recvData); //Data from uC with LF
8
9
      }
10
}

Die Methode readLine() verzögert die Ausgabe auf der GUI enorm (im 
Sekundenbereich). Auch readLine(40) o.ä. um die maximal auszulesenden 
Bytes zu begrenzen bringt keine Änderung.

readAll() dagegenen wird schnell ausgeführt.

Ideen?

von Peter II (Gast)


Lesenswert?

Stefan R schrieb:
> readAll() dagegenen wird schnell ausgeführt.
>
> Ideen?

klar, ein readline muss ja warten bis die zeile vollständig ist. ein 
ReadAll liefert einfach alles zurück was jetzt gerade das ist ohne zu 
warten.

von Stefan R (Gast)


Lesenswert?

dafür mache ich ja vorher ein:
1
if ( port->canReadLine() )

oder habe ich da ein Knoten im Kopf?

Selbst wenn es so wäre wie du meinst, dann würde die Ausgabe doch 
trotzdem in quasi Echtzeit erfolgen.
Zur Zeit ist es so, dass der uC alle 500ms etwas sendet. Sobald ich nach 
einer uC-Betriebszeit von ca. 10 Sekunden noch für weitere 2-3 Sekunden 
Zeichen auf meiner GUI bekomme

von Stefan R (Gast)


Lesenswert?

Problem "gelöst".
Zwischen LF und nächstem Zeichen war die Pause zu kurz.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.