备忘使用。

#include<boost/bind.hpp>#include<boost/asio.hpp>#include<boost/thread.hpp>usingboost::asio::io_service;usingboost::system::error_code;usingboost::asio::serial_port;usingboost::asio::deadline_timer;usingboost::asio::buffer;classMyCom{public:MyCom(void){_pSerialPort=newserial_port(_ios); _pTimer=newdeadline_timer(_ios);}~MyCom(void){if(_pTimer!=NULL){ delete_pTimer; _pTimer=NULL;}if(_pSerialPort!=NULL){ delete_pSerialPort; _pSerialPort=NULL;}}voidOpen(conststring&comName);{_pSerialPort->open(comName);_pSerialPort->set_option(serial_port::flow_control(serial_port::flow_control::none));//流量控制为none_pSerialPort->set_option(serial_port::parity(serial_port::parity::none));//奇偶检验为none_pSerialPort->set_option(serial_port::stop_bits(serial_port::stop_bits::one));//停止位为1_pSerialPort->set_option(serial_port::character_size(8));//字符大小(数据位)为8_pSerialPort->set_option(serial_port::baud_rate(115200));//波特率}voidSend(conststring&data){//同步发数据_mutex.lock();_pSerialPort->write_some(buffer(data,data.size()));_mutex.unlock();}stringRecv(){//异步收数据_mutex.lock();memset(_buf,0,sizeof(_buf));_pSerialPort->async_read_some(buffer(_buf,256), boost::bind(&MyCom::RecvHandle,this, boost::asio::placeholders::error,//传送错误码 boost::asio::placeholders::bytes_transferred//传送字节数));_mutex.unlock();_pTimer->expires_from_now(boost::posix_time::millisec(SLEEP_TIME));_pTimer->async_wait(boost::bind(&serial_port::cancel,_pSerialPort));_ios.run();//异步情况下使用词句才开始执行_ios.reset();//还原状态returnstring(_buf,_ret);}voidClose(){ _mutex.lock();if(_pSerialPort->is_open()) _pSerialPort->close();_mutex.unlock();}protected:voidRecvHandle(consterror_code&error,size_tbytes_transferred){if(!error) _pTimer->cancel();//没有错误就结束定时器_ret=bytes_transferred;}private:boost::asio::io_service_ios;serial_port*_pSerialPort;deadline_timer*_pTimer;char_buf[256];size_t_ret;boost::mutex_mutex;};