Что на самом деле делает boost :: asio :: io_service :: run ()? - PullRequest
0 голосов
/ 29 января 2019

Я реализовал клиент сокета TCP, который подключается к серверу и использует вызовы boost::asio::read() и boost::asio::write().

Немного похоже на это:

https://www.boost.org/doc/libs/1_63_0/doc/html/boost_asio/example/cpp11/chat/chat_client.cpp

Однако в моей реализации я вообще не вызываю boost::asio::io_service::run() и сокет чтения / записи все еще работает.Какова цель этого сервиса в контексте клиента сокета?Нужно ли запустить службу?

1 Ответ

0 голосов
/ 29 января 2019

io_service::run обрабатывает обработчики.Обработчики создаются функциями, которые работают в асинхронном режиме, например async_read, async_write.Эти функции возвращаются немедленно.Обработчик ставится в очередь, функция возвращает, io_service::run обрабатывает этот обработчик позже.В вашем случае asio::read не создает никакого обработчика, это блокирующая функция, поэтому нет необходимости вызывать io_service::run.

...