![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
io_serviceBoost , Boost.Asio , Reference
|
Имя |
Описание |
---|---|
Класс, используемый для однозначной идентификации услуги. |
|
Базовый класс для всех сервисов io_service. |
|
Предоставляет серийное исполнение. |
|
Класс для информирования службы io_, когда у нее есть работа. |
|
Уведомления о событиях, связанных с вилкой. |
Имя |
Описание |
---|---|
Запросите io_service вызвать данного обработчика. |
|
Конструктор. |
|
Уведомить io_service о событии, связанном с форком. |
|
Запустите цикл обработки событий объекта io_service для выполнения готовых обработчиков. |
|
Запустите цикл обработки событий объекта io_service для выполнения одного готового обработчика. |
|
Запросите io_service вызвать данного обработчика и немедленно вернуться. |
|
Сброс службы io_ в рамках подготовки к последующему вызову (вызову). |
|
Запустите цикл обработки событий объекта io_service. |
|
Запустите цикл обработки событий объекта io_service, чтобы выполнить максимум один обработчик. |
|
Остановите цикл обработки событий объекта io_service. |
|
Определить, был ли остановлен объект io_service. |
|
Создайте новый обработчик, который автоматически отправляет обернутый обработчик в службу io_. |
|
Деструктор. |
Имя |
Описание |
---|---|
Добавить объект обслуживания в сервис io_. |
|
Определить, содержит ли io_сервис определенный тип сервиса. |
|
Получить объект обслуживания, соответствующий данному типу. |
Класс io_service
обеспечивает основные функции ввода/вывода для пользователей асинхронных объектов ввода/вывода, в том числе:
boost::asio::ip::tcp::socket<19
boost::asio::ip::рецептор<19
boost::asio::ip::udp::socket<19
deadline_timer
.В класс io_service
также входят средства, предназначенные для разработчиков пользовательских асинхронных сервисов.
Distinct объекты: Безопасный.
Общие объекты: Безопасно, за исключением функций reset()
и notify_fork()
. Вызов reset()
при наличии незавершенных вызовов run
, run_one()
, poll
или poll_one()
приводит к неопределенному поведению. Функция notify_fork()
не должна называться, в то время как любая функция io_service
или любая функция на объекте ввода/вывода, связанная с io_service
, вызывается в другой поток.
Синхронные операции на объектах ввода/вывода неявно запускают объект io_service
для отдельной операции. io_service
функции run
, run_one()
, poll
или poll_one()
для выполнения асинхронных операций от имени программы C++. Уведомление о том, что асинхронная операция завершена, доставляется путем вызова соответствующего обработчика. Операторы вызываются только потоком, который в настоящее время вызывает любую перегрузку run,
для run_one()
, poll()
или poll_one
io_service
.
Если из обработчика выкинуто исключение, то допускается распространение исключения через инвокацию нити броска run()
, run_one()
, poll
или poll_one()
. Никакие другие потоки, которые вызывают какую-либо из этих функций, не затрагиваются. Тогда ответственностью приложения является уловка исключения.
После поимки исключения вызов run,
run_one()
, poll()
или poll_one()
может быть перезапущен без необходимость промежуточного вызова перезагрузка()
. Это позволяет потоку повторно присоединиться к потоку io_service
объекта, не влияя на другие потоки в пуле.
Например:
boost::asio::io_service io_service; ... for (;;) { try { io_service.run(); break; // run() exited normally } catch (my_exception& e) { // Deal with exception as appropriate. } }
Некоторым приложениям может потребоваться предотвратить возвращение вызова io_service
объекта run()
, когда работы больше не осталось. Например, io_service
может выполняться в фоновом потоке, который запускается до асинхронных операций приложения. Вызов run()
может выполняться путем создания объекта типа io_service::work
:
boost::asio::io_service io_service; boost::asio::io_service::work work(io_service); ...
Чтобы выполнить отключение, приложение должно будет вызвать функцию io_service
объекта stop()
. Это приведет к тому, что вызов io_service
run()
вернется как можно скорее, отказавшись от незавершенных операций и не разрешив отправку готовых обработчиков.
В качестве альтернативы, если приложение требует, чтобы все операции и обработчики были допущены к нормальному завершению, объект работы может быть явно уничтожен.
boost::asio::io_service io_service; auto_ptr<boost::asio::io_service::work> work( new boost::asio::io_service::work(io_service)); ... work.reset(); // Allow run() to exit.
Класс io_service
реализует расширяемый, типобезопасный, полиморфный набор услуг ввода/вывода, индексируемый по типу услуги. Объект класса io_service
должен быть инициализирован до того, как могут быть использованы такие объекты ввода/вывода, как розетки, растворители и таймеры. Эти объекты ввода/вывода отличаются наличием конструкторов, которые принимают параметр io_service&
.
Услуги ввода/вывода существуют для управления логическим интерфейсом операционной системы от имени объектов ввода/вывода. В частности, существуют ресурсы, которые делятся на класс объектов ввода-вывода. Например, таймеры могут быть реализованы в виде одной очереди таймеров. Службы ввода-вывода управляют этими общими ресурсами.
Доступ к сервисам io_service
осуществляется через три шаблона функций: use_service()
, add_service
и has_service()
.
При вызове use_service<Service>()
аргумент типа выбирает услугу, предоставляя доступ всем участникам названного типа. Если Service
не присутствует в io_service
, создается объект типа Service
и добавляется к io_service
. Программа C++ может проверить, реализует ли конкретный сервис io_service
шаблон функции has_service<Service>()
.
Объекты обслуживания могут быть явно добавлены в io_service
с использованием шаблона функций add_service<Service>()
. Если Сервис
уже присутствует, исключение service_already_exists
отбрасывается. Если владелец сервиса не является тем же объектом, что и параметр io_service
, забрасывается исключение invalid_service_owner
.
Как только ссылка на услугу получена из объекта io_service
, позвонив use_service()
, эта ссылка остается пригодной для использования до тех пор, пока существует объект io_service
.
Все реализации служб ввода/вывода имеют io_service::service
в качестве общедоступного базового класса. Пользовательские услуги ввода/вывода могут быть реализованы путем извлечения из этого класса, а затем добавлены в io_service
с использованием средств, описанных выше.
Руководитель: boost/asio/io_service.hpp
Удобный заголовок: boost/asio.hpp<5
Статья io_service раздела Boost.Asio Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
реклама |