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