boost :: io_service run()有时候永远不会返回

时间:2013-07-03 16:11:04

标签: boost boost-asio

我有以下代码从RS232端口读取数据。对于某些(从开始)运行,io.run()立即返回,并且m_handler()被调用,这是预期的。但有时候(从一开始就是一个新的运行),io.run()进入一个永久的内部循环(永远堆积在里面),即使是第一次在while循环中调用。这是随机发生的。这里的潜在问题是什么?

#define BUF_SIZE    512
char data[BUF_SIZE];

void my_handler(const boost::system::error_code& err, std::size_t bytes_transferred)
{
printf("%d\n", bytes_transferred);
if (!err){
   process_data();
}
}


void test_serial_port( int argc, char* argv[]  )
{
// hard coded parameters
const char *PORT = "COM1";
serial_port_base::baud_rate BAUD(9600);
serial_port_base::character_size CSIZE( 8 );
serial_port_base::flow_control FLOW( serial_port_base::flow_control::software );
serial_port_base::parity PARITY( serial_port_base::parity::none );
serial_port_base::stop_bits STOP( serial_port_base::stop_bits::one );

io_service io;
serial_port port( io, PORT );


// go through and set all the options as we need them
// all of them are listed, but the default values work for most cases
port.set_option( BAUD );
port.set_option( CSIZE );
port.set_option( FLOW );
port.set_option( PARITY );
port.set_option( STOP );

while( !kbhit() )
{
    io.reset();

    port.async_read_some( 
        boost::asio::buffer(data, BUF_SIZE), 
        boost::bind(&my_handler, boost::asio::placeholders::error,
                    boost::asio::placeholders::bytes_transferred )
        );

    io.run();

    Sleep(300);
}
}

0 个答案:

没有答案