Ускорение asio run vs work (неоднозначность) — какова цель рабочего класса?

#c #boost #boost-asio

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

Вопрос:

Как вы можете видеть здесь, в этом примере UDP-сервера, метод run будет поддерживать работу приложения вечно. (протестировано)

Таким образом, нет необходимости использовать рабочий класс, как указано в документации

Из документации boost: Рабочий класс используется для информирования io_service о начале и завершении работы. Это гарантирует, что функция io_service объекта run() не завершится во время выполнения работы, и что она завершится, когда не останется незавершенной работы.

Комментарии:

1. В этом примере нет необходимости. Это не значит, что он никогда не был нужен.

Ответ №1:

work Класс устарел и был заменен на executor_work_guard . Его назначение было объяснено в документации:

Некоторым приложениям может потребоваться предотвратить возврат run() вызова объекта io_context, когда больше нечего делать. Например, io_context может выполняться в фоновом потоке, который запускается перед асинхронными операциями приложения. run() Вызов может быть продолжен путем создания объекта типа boost::asio::executor_work_guard<io_context::executor_type> […]