Advertisement
AlexNovoross87

READ условие завершения

Jun 2nd, 2025
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.27 KB | None | 0 0
  1. В Boost.Asio для операций чтения и записи существует набор completion condition — функций или функциональных объектов, которые определяют, когда операция должна завершиться. Они используются в функциях boost::asio::read, boost::asio::async_read и подобных, чтобы контролировать, сколько данных читать или записывать.
  2.  
  3. Основные стандартные completion conditions в Boost.Asio
  4. 1. boost::asio::transfer_all()
  5. Означает: продолжать чтение или запись, пока весь буфер не будет заполнен или пока не возникнет ошибка.
  6.  
  7. Используется, когда нужно полностью прочитать или записать заданный буфер.
  8.  
  9. 2. boost::asio::transfer_at_least(std::size_t minimum)
  10. Означает: продолжать операцию, пока не будет считано или записано не менее minimum байт.
  11.  
  12. Полезно, когда нужно получить хотя бы определённое количество данных, но можно получить и больше.
  13.  
  14. 3. boost::asio::transfer_exactly(std::size_t size)
  15. Означает: продолжать операцию, пока не будет считано или записано ровно size байт.
  16.  
  17. Используется для точного контроля количества передаваемых данных.
  18.  
  19. Как работают completion conditions
  20. Функция получает общее количество уже переданных байт.
  21.  
  22. Возвращает количество байт, которое нужно передать в следующей операции чтения/записи.
  23.  
  24. Если возвращается 0, операция завершается.
  25.  
  26. Пример использования
  27. cpp
  28. boost::asio::read(socket, buffer, boost::asio::transfer_at_least(32));
  29. Операция будет читать из сокета, пока не будет получено минимум 32 байта.
  30.  
  31. Можно ли создавать свои completion conditions?
  32. Да, можно передавать любую функцию или функциональный объект с сигнатурой:
  33.  
  34. cpp
  35. std::size_t completion_condition(const boost::system::error_code& error, std::size_t bytes_transferred);
  36. Если возвращается 0 — операция завершается.
  37.  
  38. Иначе — возвращённое число указывает, сколько байт читать/писать в следующей итерации.
  39.  
  40. Резюме
  41. Completion Condition Описание
  42. transfer_all() Читать/писать весь буфер
  43. transfer_at_least(minimum) Читать/писать не менее minimum байт
  44. transfer_exactly(size) Читать/писать ровно size байт
  45. Пользовательская функция Своя логика завершения, возвращает 0 для окончания операции
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement