Make sure your reading loop and processing data are separated. Call you read device when needed or into a loop that can take some pause to avoid 100% CPU usage for nothing.
QByteArray buffer; void ReadDeviceHaveData() { while(serial_port->bytesAvailable()) // This can be dangerous is data keep coming and might be removed { // You can read bytes per bytes or smaller chunk over here for better reactivity and less memory consumption buffer.append(serial_port->readAll()); processData(); serial_port->waitForReadyRead(5); } } void ProcessData() { int pos = buffer.indexOf(‘\n’); while(pos >= 0) { QByteArray line = buffer.left(pos); // Strip trailing \r for windows here // Do whatever you need with your line, check data integrity // Remove the processed data but leave the unprocessed data alone buffer.remove(0, pos + 1); // Remove \n too pos = buffer.indexOf(‘\n’); } } From: Interest <interest-boun...@qt-project.org> On Behalf Of Martin Marmsoler Sent: April 2, 2019 3:58 PM To: Thiago Macieira <thiago.macie...@intel.com> Cc: interest@qt-project.org Subject: Re: [Interest] Parsing data from serialport > To be able to roll back, in case your reading from the device didn't result > in what you wanted or you got an error. See QDataStream. Ah ok I understand. So this minimal example QSerialPort sPort; sPort.open(QIODevice::ReadOnly); if(sPort.waitForReadyRead(2000)){ while (!device.atEnd()) { if (device.canReadLine()) { newData.push_back(device.readLine()); linesToRead++; } else { return; } } ... } works fine, if I go trough it step by step (maybe, because enouth data come in). But if I'm to fast it does not work. If I'm using the signal readyRead I will have the same problem, because new data come everytime. So I check that in the readyRead function if a complete line come in, and if no complete line I return without doing something otherwise I do something with the data? Is this the right way? Martin Thiago Macieira <thiago.macie...@intel.com<mailto:thiago.macie...@intel.com>> schrieb am Di., 2. Apr. 2019, 18:02: On Tuesday, 2 April 2019 07:04:03 PDT Martin Marmsoler wrote: > Thank you Thiago for your response. But what is transactionstart for? To be able to roll back, in case your reading from the device didn't result in what you wanted or you got an error. See QDataStream. -- Thiago Macieira - thiago.macieira (AT) intel.com<http://intel.com> Software Architect - Intel System Software Products _______________________________________________ Interest mailing list Interest@qt-project.org<mailto:Interest@qt-project.org> https://lists.qt-project.org/listinfo/interest
_______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest