![]() |
![]() ![]() ![]() ![]() |
![]() |
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<19boost::asio::ip::рецептор<19boost::asio::ip::udp::socket<19deadline_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_oneio_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_servicerun() вернется как можно скорее, отказавшись от незавершенных операций и не разрешив отправку готовых обработчиков.
В качестве альтернативы, если приложение требует, чтобы все операции и обработчики были допущены к нормальному завершению, объект работы может быть явно уничтожен.
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.
реклама |