先贴一段代码:
size_t CSerialCom ::Read( char *_buff, size_t len ,long overflow_time )
{
size_t ret = 0;
if(m_port.is_open() == false ) return 0;
memset( _buff , 0 , len );
m_io1.reset();
boost::asio::async_read(m_port, boost::asio::buffer( _buff , len ) ,
boost::bind( &CSerialCom::handle_read_1 , this ,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred)
);
boost::asio::deadline_timer timer( m_io1 , boost::posix_time::millisec( overflow_time ));
// 超时后调用sp的cancel()方法放弃读取更多字符
timer.expire_from_now();