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

async_read_until (3 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 boost::regex & expr,
    ReadHandler handler);

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

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

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

Parameters

s

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

b

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

expr

Регулярное выражение.

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 substring
  // that matches the regular. expression.
  // 0 if an error occurred.
  std::size_t bytes_transferred
);

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

Remarks

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

Example

Чтобы асинхронно считывать данные в streambuf, пока не встретится последовательность CR-LF:

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, boost::regex("\r\n"), handler);

Послеasync_read_untilоперация завершается успешно, буферbсодержит данные, которые соответствовали обычному выражению:

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

Призыв кст.:getlineзатем извлекает данные до и включая совпадение, так что строкастрокасодержит:

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

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

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

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


PrevUpHomeNext

Статья async_read_until (3 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 01:11:03/0.0038919448852539/0