Эта функция используется для асинхронного чтения определенного количества байтов данных из потока. Функция вызова всегда возвращается немедленно. Асинхронная операция будет продолжаться до тех пор, пока одно из следующих условий не будет правдой:
Поставляемые буферы полны. То есть передаваемые байты равны сумме размеров буфера.
Поток, из которого следует читать данные. Тип должен поддерживать концепцию AsyncReadStream.
buffers
Один или несколько буферов, в которые будут читаться данные. Сумма размеров буфера указывает максимальное количество байтов для чтения из потока. Хотя объект буферов может быть скопирован по мере необходимости, владение базовыми блоками памяти сохраняется звонящим, что должно гарантировать, что они остаются в силе до тех пор, пока обработчик не будет назван.
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().
См. buffer документацию для информации о чтении в нескольких буферах за один ход, и как использовать ее с массивами, увеличить::array или std::vector.
Статья async_read (2 of 4 overloads) раздела Boost.Asio async_read может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.