Начните асинхронное чтение.
template<
typename MutableBufferSequence,
typename ReadHandler>
void-or-deduced async_read_some(
const MutableBufferSequence & buffers,
ReadHandler handler);
Эта функция используется для асинхронного считывания данных из последовательного порта. Звонок функции всегда возвращается немедленно.
- buffers
Один или несколько буферов, в которые будут считываться данные. Хотя объект буферов может быть скопирован по мере необходимости, право собственности на базовые блоки памяти сохраняется абонентом, который должен гарантировать, что они остаются действительными до тех пор, пока обработчик не будет вызван.
- handler
-
Обработчик должен быть вызван, когда операция чтения завершится. Копии будут сделаны из обработчика по мере необходимости. Функциональная подпись обработчика должна быть:
void handler(
const boost::system::error_code& error,
std::size_t bytes_transferred
);
Независимо от того, выполняется ли асинхронная операция немедленно или нет, обработчик не будет вызываться из этой функции. Запрос обработчика будет выполнен способом, эквивалентным использованию<boost::asio::io_service::post()
>.
Операция чтения может не считывать все запрошенное количество байтов. Подумайте об использовании функции<async_read
>, если вам нужно убедиться, что запрашиваемый объем данных считывается до завершения асинхронной операции.
Для считывания в единый буфер данных используют функцию<buffer
>следующим образом:
serial_port.async_read_some(boost::asio::buffer(data, size), handler);
Смотреть<buffer
>документация для информации о считывании в несколько буферов за один ход, и как ее использовать с массивами, бустер::array или std::vector.