Я пытался понять логику в http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/examples.html. Запрос в этом примере читается внутри connection.cpp, в методе start(), который вызывает:
socket_.async_read_some(boost::asio::buffer(buffer_),
strand_.wrap(
boost::bind(&connection::handle_read, shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred)));
Обратите внимание, что метод async_read_some задокументирован для возврата немедленно. Затем внутри обработчика чтения (connection::handle_read()
) мы можем снова вызвать async_read_some, если синтаксический анализ возвращает boost::indeterminate
. Какое преимущество это дает по сравнению с socket_.read_some(buffer)
, учитывая, что мы уже знаем, что работаем в отдельном потоке. Причина, по которой я спрашиваю, заключается в том, что я хочу немного изменить синтаксический анализ сообщения, чтобы вызывать read_some по запросу, но метод, который я имею в виду, не будет работать с асинхронным чтением.
Кроме того, связанный с этим вопрос: есть ли разница между
async_read_some()
и
boost::thread th([](){ ret = read_some(); handle_read(ret) });
?