Ich arbeite mit einem seriellen Gerät. Der QSerialPort befindet sich in einem separaten Thread. Thema ist auf diese Weise erstellt:QSerialPort - wating für ganze Daten vom Absender
QThread* serialthread = new QThread;
Serial* serial = new Serial();
serial->moveToThread(serialthread);
Wenn Daten verfügbar dieses Signal in meinem Thread Arbeiter ist emited:
void Serial::process()
{
serialport = new QSerialPort();
connect(this->serialport,SIGNAL(readyRead()),this,SLOT(readyToRead()));
}
void Serial::readyToRead()
{
emit SIG_dataAvailable(this->read());
}
Dies ist die Funktion, die die Daten und prüft, liest, wenn die Daten korrekt sind - das zweite Byte auf meinem seriellen Gerät sagt, wie lange der Rest des Pakets ist ...
QByteArray Serial::read() const
{
QByteArray receivedData;
int length;
receivedData = serialport->readAll();
length = receivedData[1];
if(length != receivedData.length() - 1)
{
qDebug() << "protocol error.";
return NULL;
}
return receivedData;
}
Mein Problem ist, dass das Signal QSerialPort :: readyread vor dem da emited ist ta vom seriellen Gerät ist im Puffer abgeschlossen. Irgendeine Idee, wie man dieses Problem löst?
i Qserial, weil ich in einem Differnt Gewinde M put möchte ein Auto-ECU in Echtzeit überwachen. Ich versuchte es im Hauptfenster process und die GUI war sehr laggy –
Ich denke, es ist eiskalt, weil Sie QSerialPort in einer "blockierenden" (nicht asynchronen) Maner verwenden. Deshalb friert http://code.qt.io/cgit/qt/qtserialport.git/tree/src/serialport/qserialport.cpp#n201 ein – YouDoItWrong