我使用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吗?