再用asio编写串口异步读写程序的时候,有时候会出现将一帧报文分几次读的情况,比如对方发过来16个字节,可能消息响应函数被调用了两次,每次读取8字节,为了处理这种情况,必须设置串口字节超时间隔(这里设置为20ms),根据此参数来判断相邻的两个报文是否可视为同一报文,而boost::asio::serial_port 类没有直接提供字节间隔时间的配置,所以要通过native()函数获得本地对象,然后再设置
代码如下:
//xx.h
//boost::asio::serial_port m_serial_port;
//xx.cpp
#ifdef _MSC_VER
COMMTIMEOUTS to;GetCommTimeouts(m_serial_port.native(),&to);
to.ReadIntervalTimeout = 20;
SetCommTimeouts(m_serial_port.native(),&to);
#endif