Вы можете использовать executor_work_guard .В ctor он берет executor из экземпляра io_context и вызывает on_work_started
для этого исполнителя, что означает, что io_context::run
не заканчивается, когда нет работы, которую нужно выполнить см. Ссылку .
Это гарантирует, что функции run () и run_one () io_context не завершаются во время работы.
Таким образом, простой код выглядит как
boost::asio::io_context io;
boost::asio::executor_work_guard<decltype(io.get_executor())> work{io.get_executor()};
io.run(); // [1]
cout << "you will never see this line" << endl;
, код висит в 1 строка.io_context::run
может закончиться, когда вызывается деструктор work
.
В более старых версиях boost или asio эквивалентный класс: io_service :: work