Эта функция используется для асинхронного чтения определенного количества байтов данных из потока. Звонок функции всегда возвращается немедленно. Асинхронная операция будет продолжаться до тех пор, пока не будет выполнено одно из следующих условий:
Поставляемый буфер полон (то есть достиг максимального размера).
Объект функции завершения_условия возвращает 0.
Эта операция реализована в терминах нуля или более вызовов функции async_read_some потока и известна как.. Программа должна гарантировать, что поток не выполняет никаких других операций чтения (таких как async_read, функция async_read_some потока или любые другие составные операции, которые выполняют чтения) до завершения этой операции.
Поток, из которого следует читать данные. Этот тип должен поддерживать концепцию AsyncReadStream.
b
<basic_streambuf>объект, в который будут считаны данные. Владение Streambuf сохраняется за абонентом, который должен гарантировать, что он остается действительным до тех пор, пока не будет вызван обработчик.
completion_condition
Объект функции должен быть вызван, чтобы определить, завершена ли операция чтения. Подпись объекта функции должна быть:
std::size_tcompletion_condition(// Result of latest async_read_some operation.constboost::system::error_code&error,// Number of bytes transferred so far.std::size_tbytes_transferred);
Обратное значение 0 означает, что операция чтения завершена. Ненулевое значение возврата указывает на максимальное количество байтов, которые будут считаны при следующем вызове функции async_read_some потока.
handler
Обработчик должен быть вызван, когда операция чтения завершится. Копии будут сделаны из обработчика по мере необходимости. Функциональная подпись обработчика должна быть:
voidhandler(constboost::system::error_code&error,// Result of operation.std::size_tbytes_transferred// Number of bytes copied into the// buffers. If an error occurred,// this will be the number of// bytes successfully transferred// prior to the error.);
Независимо от того, выполняется ли асинхронная операция немедленно или нет, обработчик не будет вызываться из этой функции. Привлечение обработчика будет выполнено способом, эквивалентным использованию<boost::asio::io_service::post()>.
Статья async_read (4 of 4 overloads) раздела Boost.Asio async_read может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.