2016-04-25 13 views
0

Gibt es eine Möglichkeit, benachrichtigt zu werden, wenn mein serielles Gerät bereit ist, mehr Daten zu empfangen?Wie kann ich wissen, wann QSerialPort für weitere Daten in Qt5 bereit ist?

Ich bin der Umsetzung ein Programm, das Befehle an einen Servo-Controller über die serielle Verwendung des asynchronen API von QSerialPort Feeds. Das Programm funktioniert, aber es scheint, dass ich Staus habe.

In meiner Anwendung halte ich eine Registrierung der meisten aktualisierten Servo-Position, die ich mit dem Controller mit so wenig Latenz wie möglich synchronisieren möchte. Mein Versuch, neue Daten so schnell wie möglich an die serielle Schnittstelle zu übertragen, führt mich zu einer Ansammlung von Daten, die die Kommunikation zusammenbrechen lassen.

Meine Frage ist, kann ich benachrichtigt werden, wenn die serielle Schnittstelle bereit ist, neue Daten irgendwie zu empfangen, während QSerialPort in asynchronen Modus verwendet?

Die einzige andere Option, die ich sehe, ist synchronen Modus zu verwenden und waitForBytesWritten() aufrufen, aber ich will das wirklich nicht tun.

HINWEIS: Ich habe die serial port examples in the Qt5 documentation sorgfältig studiert, aber die example for asynchronous write bietet nicht die Informationen, die ich brauche, da es eine einmalige Aufnahme vor dem Beenden durchführen.

Antwort

1

Sie könnten das Signal bytesWritten abhören und bytesToWrite überprüfen, um festzustellen, ob der Schreibpuffer leer ist. Beide sind von QIODevice geerbt.

+0

Sie meinen, bytesWritten handler check bytesToWrite? –

+0

Ja. Der bytesWritten-Handler könnte mehrmals aufgerufen werden, aber nur wenn bytesToWrite Null erreicht, ist der Schreibpuffer leer. –

+0

Ich hatte meinen eigenen Counter gemacht, der nichts von Byteswritten() wusste, aber das funktionierte nicht sehr gut. Ersetzen Sie einfach meine Variable mit diesem Anruf und alles ist gut. –