Разблокировать синхронное чтение на boost :: asio :: serial_port

У меня есть boost :: thread , который выполняет синхронное чтение на boost :: asio :: serial_port . Когда я уничтожаю экземпляр класса, который содержит и то, и другое, я хочу, чтобы поток завершился корректно, даже если он заблокирован в вызове чтения. Как я могу это сделать?

Глядя на docs , я попробовал cancel , но он работает только для асинхронного чтения / записи. Затем я попытался закрыть , но у меня было исключение, и это было не из тех, от которых можно было бы восстановить. Возможно, с помощью send_break или native_handle ? (это Windows, и переносимость не критична)

Обновление : я также пытался остановить io_service , который я передал конструктору объекта последовательного порта, но чтение не разблокировано.

Правка : Исключение на самом деле «улавливается», но я бы не хотел помещать блок try / catch внутри деструктора, а рефакторинг кода для выполнения процесса завершения работы вне деструктора вызовет множество изменений в верхние слои. Поэтому я бы выбрал это решение только в том случае, если какой-то авторитет Boost скажет, что другого пути нет.

7
задан dario_ramos 10 February 2012 в 20:52
поделиться