Продолжайте повышать asio io_service

#c #boost-asio

#c #повышение-asio

Вопрос:

Обычно я сохраняю один объект io_service для всего приложения и использую несколько потоков для вызова run для них. При создании сокетов или таймеров используйте io_service по ссылке. Что произойдет, когда все потоки завершатся при выходе из приложения и произойдет, скажем, операция выключения или отмены, вызванная в сокете tcp. Io_service больше недоступен. Существует ли копия io_service при передаче ее любому классу, связанному с asio, или это неопределенное поведение?

Ответ №1:

Никогда не существует копии io_service (или более поздней io_context , которая заменяет устаревшую io_service ). Это потому, что его невозможно скопировать.

Если вы не поддерживаете время жизни, пока асинхронные операции не завершены, поведение действительно не определено. Однако не так уж сложно убедиться, что асинхронные операции/завершения не выполняются, принудительно остановив службу в ожидании завершения любых ожидающих выполнения операций.

Я предлагаю последний подход для кода качества продукции.