C++ 串行接收数据的顺序错误

C++ 串行接收数据的顺序错误,c++,linux,serial-port,libserial,C++,Linux,Serial Port,Libserial,我现在正在做一个项目,在Ubuntu下使用libserial进行串口通信。我们修改了libserial源代码以允许标记/空间奇偶校验。但在进行数据接收测试时,有时(大约5%的概率)传入的数据序列是错误的。第一个字节可以跳到传入缓冲区的中间,甚至跳到结尾 问题出在原始的SerialPort::SerialPortImpl::HandlePosixSignal(int singnalNumber)f函数中,当发生错误时,它无法正确读取某些字节,错误描述为“资源暂时不可用”。但既然它已经使用ioctl

我现在正在做一个项目,在Ubuntu下使用libserial进行串口通信。我们修改了libserial源代码以允许标记/空间奇偶校验。但在进行数据接收测试时,有时(大约5%的概率)传入的数据序列是错误的。第一个字节可以跳到传入缓冲区的中间,甚至跳到结尾

问题出在原始的
SerialPort::SerialPortImpl::HandlePosixSignal(int singnalNumber)f
函数中,当发生错误时,它无法正确读取某些字节,错误描述为“资源暂时不可用”。但既然它已经使用ioctl获得可用的
num\u字节数
,怎么可能失败呢

在测试期间,我经常在标记/空格奇偶校验之间切换。这会导致问题吗

SetParity
函数中的修改部分

for **PARITY_SPACE**

port_settings.c_cflag |= CMSPAR | PARENB;

port_settings.c_cflag &= ~PARODD;

port_settings.c_iflag = 0;

for **PARITY_MARK**

port_settings.c_cflag |= CMSPAR | PARENB;

port_settings.c_iflag = 0;

好吧,我终于找到了问题的原因。
libserial
SerialPort
类不是线程安全的。POSIX信号可能与boost线程冲突。我可以通过切换到
SerialStream
类来解决这个问题。

测试后,我发现只有当我将串口读/写函数放到boost线程上时,问题才会发生。当在主线程中读/写时,它可以完美地运行。但我必须使用a线程,有什么可能的解决方案吗?