取消阻止boost :: asio :: serial_port上的同步读取

dar*_*mos 7 c++ windows boost serial-port boost-asio

我有一个在a boost::thread上执行同步读取boost::asio::serial_port.当我销毁包含两者的类的实例时,我希望线程优雅地结束,即使它在读取调用中被阻止.我怎样才能做到这一点?

看看文档,我尝试过cancel,但它只适用于异步读/写.然后我尝试了close,但是我得到了一个例外,它不是你可以恢复的那种.也许用send_breaknative_handle?(这是Windows和便携性并不重要)

更新:我也试图stopio_service传递到串口对象的构造我,但read并不畅通.

编辑:异常实际上是"可捕获的",但我不想在析构函数中放置一个try/catch块,并且重构代码以在析构函数之外执行关闭过程会在上层触发大量更改.因此,如果一些Boost权威人士说没有别的办法,我只会选择这个解决方案.

Raf*_*cki 5

没有办法按要求取消阻止同步读取.

有两种选择:

  • close/ shutdown端口并捕获异常,这是异常的
  • cancel关闭应用程序时,使用异步读取和它们

当然,第一个不是一个好主意,因为你无法区分终止应用程序和错误.

  • 这就是为什么Boost :: Asio不叫Boost :: SioAndAsio :) (2认同)