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

ольно новичок в 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. Надеюсь, я не первый, кто просит об этом.

Ответы на вопрос(1)

Ваш ответ на вопрос