提升asio - 关闭串口

时间:2017-01-30 13:41:47

标签: c++ boost

我使用boost asio串口和ioservice,它在单独的线程上运行:

ioServiceThread = std::thread(boost::bind(&boost::asio::io_service::run, &ioService));

我需要实现一个关闭并再次打开串口的回调。 我想知道如何关闭串口。这是第一个版本:

if (serialPort.is_open())
{
     ioService.post(boost::bind(&SerialPortAccess::DoClose, this, boost::system::error_code()));
}

//iosService.stop() ?

if (ioServiceThread.joinable())
{
     ioServiceThread.join();
}

//ioService.reset() ?

void DoClose(const boost::system::error_code& error)
{
     if(!(error.message().empty()))
     {
          //throw some exception ?
     }

     serialPort.close();
}

第二版:

if (serialPort.is_open())
{
     serialPort.close();
}

//iosService.stop() ?

if (ioServiceThread.joinable())
{
     ioServiceThread.join();
}

//ioService.reset() ?

我想如果我使用post方法(第一版),一些撤消任务(串口读/写)将在关闭串口之前完成,对吧?当错误消息不为空时,我应该从DoClose方法抛出异常吗?该错误是否意味着串口无法关闭?我应该在ioservice上调用stop和reset吗?

0 个答案:

没有答案