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

io_service

Boost , Boost.Asio , Reference

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

Обеспечивает основные функции ввода/вывода.

class io_service :
  noncopyable
Types

Имя

Описание

id

Класс, используемый для однозначной идентификации услуги.

сервис

Базовый класс для всех сервисов io_service.

strand

Предоставляет серийное исполнение.

работа

Класс для информирования службы io_, когда у нее есть работа.

fork_event

Уведомления о событиях, связанных с вилкой.

Member Functions

Имя

Описание

dispatch

Запросите io_service вызвать данного обработчика.

io_service

Конструктор.

notify_fork

Уведомить io_service о событии, связанном с форком.

poll

Запустите цикл обработки событий объекта io_service для выполнения готовых обработчиков.

poll_one

Запустите цикл обработки событий объекта io_service для выполнения одного готового обработчика.

post

Запросите io_service вызвать данного обработчика и немедленно вернуться.

перезагрузка

Сброс службы io_ в рамках подготовки к последующему вызову (вызову).

run

Запустите цикл обработки событий объекта io_service.

run_one

Запустите цикл обработки событий объекта io_service, чтобы выполнить максимум один обработчик.

стоп

Остановите цикл обработки событий объекта io_service.

остановился

Определить, был ли остановлен объект io_service.

wrap

Создайте новый обработчик, который автоматически отправляет обернутый обработчик в службу io_.

~io_service

Деструктор.

Friends

Имя

Описание

add_service

Добавить объект обслуживания в сервис io_.

has_service

Определить, содержит ли io_сервис определенный тип сервиса.

use_service

Получить объект обслуживания, соответствующий данному типу.

Класс io_service обеспечивает основные функции ввода/вывода для пользователей асинхронных объектов ввода/вывода, в том числе:

  • boost::asio::ip::tcp::socket<19
  • boost::asio::ip::рецептор<19
  • boost::asio::ip::udp::socket<19
  • deadline_timer.

В класс io_service также входят средства, предназначенные для разработчиков пользовательских асинхронных сервисов.

Thread Safety

Distinct объекты: Безопасный.

Общие объекты: Безопасно, за исключением функций reset() и notify_fork(). Вызов reset() при наличии незавершенных вызовов run, run_one(), poll или poll_one() приводит к неопределенному поведению. Функция notify_fork() не должна называться, в то время как любая функция io_service или любая функция на объекте ввода/вывода, связанная с io_service, вызывается в другой поток.

Synchronous and asynchronous operations

Синхронные операции на объектах ввода/вывода неявно запускают объект io_service для отдельной операции. io_serviceфункции run, run_one(), poll или poll_one() для выполнения асинхронных операций от имени программы C++. Уведомление о том, что асинхронная операция завершена, доставляется путем вызова соответствующего обработчика. Операторы вызываются только потоком, который в настоящее время вызывает любую перегрузку run, run_one(), poll() или poll_one для io_service.

Effect of exceptions thrown from handlers

Если из обработчика выкинуто исключение, то допускается распространение исключения через инвокацию нити броска 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.
  }
}
Stopping the io_service from running out of work

Некоторым приложениям может потребоваться предотвратить возвращение вызова 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. 
The io_service class and I/O services

Класс 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 с использованием средств, описанных выше.

Requirements

Руководитель: boost/asio/io_service.hpp

Удобный заголовок: boost/asio.hpp<5


PrevUpHomeNext

Статья io_service раздела Boost.Asio Reference может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Reference ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 09:26:30/0.0083260536193848/0