У меня есть boost::thread
, который выполняет синхронные чтения на boost::asio::serial_port
. Когда я уничтожаю экземпляр класса, который содержит оба, я хочу, чтобы поток завершился изящно, даже если он заблокирован в вызове чтения. Как я могу это сделать?
Глядя на документы , я попытался cancel
, но он работает только для асинхронного чтения / записи. Затем я попытался close
, но у меня возникло исключение, и это было не то, от чего можно оправиться. Возможно, используя send_break
или native_handle
? (это Windows и переносимость не критична)
Обновление : Я также попытался stop
io_service
, который я передал конструктору объекта последовательного порта, но read
не был разблокирован.
Редактировать : Исключение на самом деле "перехватывается", но я бы не хотел помещать блок try / catch внутри деструктора, а рефакторинг кода для выполнения процесса выключения вне деструктора вызывал бы лоты изменений в верхних слоях. Так что я бы пошел на это решение, только если кто-то из авторитетов Boost сказал, что другого пути нет.