我面临着readyRead的怪异的行为()。我使用QextSerialPort进行串行通信,并将readyRead()与我的阅读插槽连接。例如,我写了45个字节到端口,期望读取45个字节,但是发生了什么,我的readyRead()信号被多次发送,这意味着它将首先读取38个字节,然后读取7个字节。我怎样才能让它读取整个数据块?QextSerialPort阅读问题
//Port setup
m_pSerialPort = new QextSerialPort(pduPortName, m_PortSettings, QextSerialPort::EventDriven);
m_pSerialPort->setBaudRate(m_PortSettings.BaudRate);
m_pSerialPort->setDataBits(m_PortSettings.DataBits);
m_pSerialPort->setFlowControl(m_PortSettings.FlowControl);
m_pSerialPort->setParity(m_PortSettings.Parity);
m_pSerialPort->setStopBits(m_PortSettings.StopBits);
m_pSerialPort->setTimeout(500);
m_pSerialPort->flush();
m_pSerialPort->open(QIODevice::ReadWrite | QIODevice::Unbuffered);
connect(m_pSerialPort, SIGNAL(readyRead()), this, SLOT(readSerialData()));
//write
qint64 bytesWritten = pSerialPort->write(data, bytes_to_write);
//Read
qint64 availableBytes = pSerialPort->bytesAvailable();
if (availableBytes >= SIZE)
bytesRead = pSerialPort->read(data , availableBytes);
我希望我能很好地解释我的问题。请帮忙!
注:我使用STANAG协议我的消息。
我在开始阅读端口之前添加了sleep(1),现在它工作。我需要找到一个更好的解决方案。 – newbieLinuxCpp
我也面临这个问题... 难道你有什么更好的解决办法 –
@ArunKumarKS其实据我记得,我通过循环,直到读的预期字节固定它。 – newbieLinuxCpp