再用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