Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

async_read_until (2 of 4 overloads)

Boost , Boost.Asio , async_read_until

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Запустите асинхронную операцию для считывания данных в streambuf до тех пор, пока он не будет содержать определенный разграничитель.

template<
    typename AsyncReadStream,
    typename Allocator,
    typename ReadHandler>
void-or-deduced async_read_until(
    AsyncReadStream & s,
    boost::asio::basic_streambuf< Allocator > & b,
    const std::string & delim,
    ReadHandler handler);

Эта функция используется для асинхронного считывания данных в указанный streambuf до тех пор, пока область получения streambuf не содержит указанный делимитер. Звонок функции всегда возвращается немедленно. Асинхронная операция будет продолжаться до тех пор, пока не будет выполнено одно из следующих условий:

  • Зона получения Streambuf содержит указанный делимитер.
  • Произошла ошибка.

Эта операция реализована в терминах нуля или более вызовов функции async_read_some потока и известна каксоставленная операция. Если зона получения Streambuf уже содержит разграничитель, эта асинхронная операция завершается немедленно. Программа должна гарантировать, что поток не выполняет никаких других операций чтения (таких как async_read, async_read_until, функция async_read_some потока или любые другие составные операции, которые выполняют чтения) до завершения этой операции.

Parameters

s

Поток, из которого следует читать данные. Этот тип должен поддерживать концепцию AsyncReadStream.

b

Объект streambuf, в который будут считываться данные. Владение Streambuf сохраняется за абонентом, который должен гарантировать, что он остается действительным до тех пор, пока не будет вызван обработчик.

delim

Струна разграничителя.

handler

Обработчик должен быть вызван, когда операция чтения завершится. Копии будут сделаны из обработчика по мере необходимости. Функциональная подпись обработчика должна быть:

void handler(
  // Result of operation.
  const boost::system::error_code& error,
  // The number of bytes in the streambuf's get
  // area up to and including the delimiter.
  // 0 if an error occurred.
  std::size_t bytes_transferred
);

Независимо от того, выполняется ли асинхронная операция немедленно или нет, обработчик не будет вызываться из этой функции. Запрос обработчика будет выполнен способом, эквивалентным использованию<boost::asio::io_service::post()>.

Remarks

После успешной работы async_read_until, streambuf может содержать дополнительные данные за пределами разграничителя. Приложение обычно оставляет эти данные в streambuf для последующей работы async_read_until.

Example

Чтобы асинхронно считывать данные в streambuf до появления новой линии:

boost::asio::streambuf b;
...
void handler(const boost::system::error_code& e, std::size_t size)
{
  if (!e)
  {
    std::istream is(&b);
    std::string line;
    std::getline(is, line);
    ...
  }
}
...
boost::asio::async_read_until(s, b, "\r\n", handler);

После успешного завершения операции<async_read_until>буфер<b>содержит разграничитель:

{ 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... }

Призыв к<std::getline>затем извлекает данные до и включая делимитер, так что строка<line>содержит:

{ 'a', 'b', ..., 'c', '\r', '\n' }

Остальные данные оставляют в буфере<b>следующим образом:

{ 'd', 'e', ... }

Эти данные могут быть началом новой линии, которая будет извлечена последующей операцией<async_read_until>.


PrevUpHomeNext

Статья async_read_until (2 of 4 overloads) раздела Boost.Asio async_read_until может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: async_read_until ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 00:53:03/0.0058629512786865/1