1. 程式人生 > >boost asio 串列埠操作中修改位元組超時間隔引數

boost asio 串列埠操作中修改位元組超時間隔引數

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