Maybe you don't need another thread, just maybe an event loop (QEventLoop)?
> Sent: Thursday, April 04, 2019 at 10:43 AM > From: "Jérôme Godbout" <godbo...@amotus.ca> > To: "Paolo Angelelli" <paolo.angele...@qt.io>, "interest@qt-project.org" > <interest@qt-project.org> > Subject: Re: [Interest] Parsing data from serialport > > It relief the main thread from read data all the time and keep a good > reactivity. The dedicated thread try to read and can wait until something > come along and once it found something that can be parsed, it emit his own > signal that the main thread only have to handle into normal slot (will be > queued, since it's not the same thread). > > But yeah, you can have the main thread do it and process the readyRead(), you > main thread will perform the read and parsing. if you have any CRC and other > things, this might be bad for application reactivity, depending on the amount > of data flowing. > > -----Original Message----- > From: Interest <interest-boun...@qt-project.org> On Behalf Of Paolo Angelelli > Sent: April 4, 2019 10:19 AM > To: interest@qt-project.org > Subject: Re: [Interest] Parsing data from serialport > > What is the advantage of having such a continuous reading loop in a separate > thread? > > I mean it as opposed to reacting to the readyRead() signal, and having a > while(canReadLine()) { ... } in the reacting slot. > > > On Tue, 2 Apr 2019 22:01:49 +0000 > Jérôme Godbout <godbo...@amotus.ca> wrote: > > > 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 > _______________________________________________ > Interest mailing list > 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