C++ qextserialport在Windows上丢弃数据--对此我能做些什么?
背景 目前,我使用它来收集传感器数据,然后通过其USB串行端口以115200波特的速度传输数据 在过去,我使用Python开发与mote接口的程序,但Python的GIL也有线程问题,只有不使用Python才能解决(我在初始测试阶段后需要它的并发性),因此我转向了C++/Qt。我花了很多时间在Qt上,因为我没有事先的知识,学习了它的大多数最佳实践,使一切都完美地工作。除了这个问题什么都有 问题 当我尝试读取端口时,如果有大量数据通过,某些数据集将神秘地出错,导致项目中的丢失率高于预期 这种情况在我使用时发生,但在使用时不会发生 以下是使用qextserialport初始化端口的方式: 和pySerial: 问题 因此,我怀疑两个库初始化端口的方式有所不同,但我没有串行编程的经验,可能是错误的C++ qextserialport在Windows上丢弃数据--对此我能做些什么?,c++,python,qt,pyserial,qextserialport,C++,Python,Qt,Pyserial,Qextserialport,背景 目前,我使用它来收集传感器数据,然后通过其USB串行端口以115200波特的速度传输数据 在过去,我使用Python开发与mote接口的程序,但Python的GIL也有线程问题,只有不使用Python才能解决(我在初始测试阶段后需要它的并发性),因此我转向了C++/Qt。我花了很多时间在Qt上,因为我没有事先的知识,学习了它的大多数最佳实践,使一切都完美地工作。除了这个问题什么都有 问题 当我尝试读取端口时,如果有大量数据通过,某些数据集将神秘地出错,导致项目中的丢失率高于预期 这种情况在
有人知道是什么导致了这个错误吗?结果是我错误地使用了
QextSerialPort::bytesavable()
而不是QextSerialPort::atEnd()
。我在另一个问题中看到了这一点,它帮助我消除了在等待超时时基本上阻止我的应用程序的错误消息,并且
Wes的评论解决了我的另一个问题,那就是微尘没有分配足够的内存来存储所有数据,这导致了数据丢失。很可能是因为串行端口的输入缓冲区比您读取它的速度快。您可能需要更快或更频繁地读取/检查它,或者找到一种增加缓冲区大小的方法。但我不知道怎么做,这就是为什么这是一个评论,而不是一个答案:-P
port.setName("COM3");
port.setQueryMode(QextSerialPort::EventDriven);
port.setBaudRate(BAUD115200);
port.setParity(PAR_NONE);
port.setDataBits(DATA_8);
port.setStopBits(STOP_1);
port.setFlowControl(FLOW_OFF);
port = Serial('COM3', 115200)