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

Basic Boost.Asio Anatomy

Boost , Boost.Asio , Core Concepts and Functionality

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

Повышаю. Asio может использоваться для выполнения как синхронных, так и асинхронных операций на объектах ввода/вывода, таких как розетки. Перед использованием Boost. Asio может быть полезно получить концептуальную картину различных частей Boost. Асио, твоя программа и как они работают вместе.

В качестве вводного примера рассмотрим, что происходит при выполнении операции подключения на розетке. Начнем с изучения синхронных операций.

sync_op

Ваша программабудет иметь по крайней мере одинio_serviceобъект.io_serviceпредставляетВаша программаСсылка на операционную системуУслуги ввода/вывода.

boost::asio::io_service io_service;

Для выполнения операций ввода/выводавашей программепотребуется.Объект ввода/вывода, такой как гнездо TCP:

boost::asio::ip::tcp::socket socket(io_service);

При выполнении синхронной операции соединения происходит следующая последовательность событий:

1.Ваша программаинициирует операцию соединения, позвонивОбъект ввода/вывода:

socket.connect(server_endpoint);

2.объект ввода/выводанаправляет запрос вio_service.

3.io_serviceпризывает операционную системувыполнить операцию подключения.

4. Операционная системавозвращает результат операции вio_service.

5.io_serviceпереводит любую ошибку, возникшую в результате операции, в объект типа<boost::system::error_code>.<error_code>может быть сопоставлен с конкретными значениями или протестирован как булевой (где результат<false>означает, что ошибки не произошло). Затем результат переносится обратно в.Объект ввода/вывода.

6.Объект ввода/выводавыбрасывает исключение типа<boost::system::system_error>, если операция не удалась. Если код для запуска операции был написан как:

boost::system::error_code ec;
socket.connect(server_endpoint, ec);

Тогда<error_code>переменная<ec>будет установлена на результат операции, и никаких исключений не будет.

При использовании асинхронной операции происходит иная последовательность событий.

async_op1

1.Ваша программаинициирует операцию соединения, позвонивОбъект ввода/вывода:

socket.async_connect(server_endpoint, your_completion_handler);

где<your_completion_handler>- функция или объект функции с подписью:

void your_completion_handler(const boost::system::error_code& ec);

Точная требуемая подпись зависит от выполняемой асинхронной операции. Справочная документация указывает соответствующую форму для каждой операции.

2.объект ввода/выводанаправляет запрос вio_service.

3.io_serviceсигнализирует операционной системе, что она должна начать асинхронное соединение.

Время идет. (В синхронном случае это ожидание было бы полностью включено в продолжительность операции соединения.)

async_op2

4. Операционная системауказывает, что операция подключения завершена путем размещения результата в очереди, готовой к тому, чтобы быть подобранной службойio_service.

5.Ваша программадолжна сделать вызов<io_service::run()>(или одной из аналогичныхфункций члена io_service), чтобы получить результат. Звонок в<io_service::run()>блоков, пока есть незавершенные асинхронные операции, поэтому вы обычно звоните, как только начинаете свою первую асинхронную операцию.

6.В то время как внутри вызова к<io_service::run()>,io_serviceвыстраивает очередь из результата операции, переводит его в<error_code>, а затем передает еговашему обработчику завершения.

Это упрощенная картина того, как наращивать. Азио работает. Вы захотите углубиться в документацию, если ваши потребности более продвинуты, например, расширение Boost. Asio выполняет другие виды асинхронных операций.


PrevUpHomeNext

Статья Basic Boost.Asio Anatomy раздела Boost.Asio Core Concepts and Functionality может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Core Concepts and Functionality ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 18:13:48/0.028759002685547/1