Список активных обработчиков в boost io_service - PullRequest
5 голосов
/ 25 сентября 2010

При сборке модульных тестов для клиент-серверной системы на работе я столкнулся с проблемой, когда мой io_service не выпускался после завершения работы всех активных обработчиков (о которых я знал).

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

У меня такой вопрос: есть ли простой способ перечислить активные в настоящий момент обработчики в boost io_service?, если нет, то почему?

Любое понимание будет оценено.

1 Ответ

1 голос
/ 07 ноября 2010

Существует несколько проблем:

  • Бухгалтерский учет станет дорогостоящим, особенно в системах с большим количеством операций и значительным параллелизмом.
  • Даже если вы получилисписок, вы не знаете, является ли он актуальным.

Я не знаю, являются ли это конкретными причинами для boost :: asio, но эти причины выскакивают у меня.

Чтобы решить актуальную проблему, деструкторы и прицелы - ваш друг.Я считаю полезным иметь контейнер дескрипторов объектов высокого уровня (например, слушателей сокетов) и просто позволять им выходить из области видимости, когда вы хотите завершить работу.Я считаю, что shared_ptr хорош, но вы можете использовать любые варианты.

Если вам нужно вызвать метод stop() для каждого объекта, который вы хотите остановить, вы что-то забудете.Пусть деструкторы делают всю работу.

...