【发布时间】:2012-02-08 19:24:32
【问题描述】:
我有一个boost::thread,它对boost::asio::serial_port 执行同步读取。当我销毁包含两者的类的实例时,我希望线程优雅地结束,即使它在读取调用中被阻塞。我该怎么做?
查看docs,我尝试了cancel,但它仅适用于异步读/写。然后我尝试了close,但我遇到了一个例外,这不是你可以恢复的那种。也许使用send_break 或native_handle? (这是 Windows,可移植性并不重要)
更新:我还尝试将stop io_service 传递给串行端口对象的构造函数,但read 并没有解除阻塞。
编辑:异常实际上是“可捕获的”,但我不想在析构函数中放置一个 try/catch 块,并且重构代码以在析构函数之外执行关闭过程会触发上层有很多变化。因此,如果某些 Boost 权威说没有其他方法,我只会选择这个解决方案。
【问题讨论】:
标签: c++ windows boost serial-port boost-asio