специальный поток для io_service :: run () - PullRequest
9 голосов
/ 21 декабря 2009

Я хочу предоставить глобальный io_service, управляемый одним глобальным потоком. Достаточно просто, у меня просто есть вызов тела потока io_service::run(). Тем не менее, это не работает как run (run_one, poll, poll_one), если нет работы. Но если поток повторно вызывает run (), он будет занят циклом, когда делать нечего.

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

Примечание. Фактических глобальных переменных не существует, и я никогда не использую события для параллелизма. Я просто упростил задачу до моей конкретной потребности. Настоящая цель - это подкласс asio::deadline_timer, для которого не требуется io_service в качестве параметра конструкции.

1 Ответ

21 голосов
/ 22 декабря 2009

Вам необходимо создать io_service::work объект.

См. Этот раздел документации:

Прекращение работы io_service

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...