boost :: asio :: io_service занимала длины очереди для таймеров и сообщений

Я новичок в boost :: asio, но я работаю над проектом, который существует уже несколько лет и широко использует asio. Мое текущее задание - добавить периодические метрики о различных действиях системы. Одна из метрик - наблюдать, насколько глубокими становятся рабочие очереди boost :: asio :: io_service и очереди таймеров в произвольный период времени выполнения. Поэтому мне нужно иметь возможность спросите объект boost: asio :: io_service, сколько вещей у него в очередях.

Чтобы проиллюстрировать то, что я прошу, рассмотрите следующее:

boost::asio::io_service asio_service;

asio_service.post( boost::bind( do_work, "eat" ) );
asio_service.post( boost::bind( do_work, "drink" ) );
asio_service.post( boost::bind( do_work, "and be merry!" ) );

std::cout << "There are " << asio_service.XXXX() 
          << "things in the post() queue and "
          << asio_service.YYYY() << " timers"

Есть ли способ с помощью boost asio, чтобы получить функциональность, эквивалентную моей Вызовы "XXXX ()" и "YYYY ()" выражаются?

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

11
задан ildjarn 23 July 2011 в 22:47
поделиться