Получить количество (активных) таймеров в цикле событий Node.js
Есть ли способ сделать вызов в Node.js, чтобы определить количество таймеров в очереди цикла событий? У меня есть библиотека с несколькими тайм-аутами, и вместо того, чтобы отслеживать их самостоятельно, используя какую-то внутреннюю систему бухгалтерии, было бы неплохо, если бы я мог просто спросить V8, Libuv или что-то еще, сколько существует таймеров.
Это возможно?
1 ответ
было бы хорошо, если бы я мог просто спросить V8 или Libuv или что-то еще
Вы не можете напрямую спросить libuv, но он определенно предлагает способ узнать, сколько активных таймеров есть.
Для этого вы можете вызвать uv_walk
с действительным циклом, чтобы получить все активные маркеры. Затем вы можете проверить каждый дескриптор с заданным обратным вызовом и сосчитать те, для которых член данных type
(это имеет тип uv_handle_type
) равно UV_TIMER
,
Результатом является количество активных таймеров.
См. Документацию для получения дополнительной информации о структуре данных дескриптора.
В качестве тривиального примера рассмотрим следующую структуру:
struct Counter {
static int count;
static void callback(uv_handle_t* handle, void*) {
if(handle.type == uv_handle_type::UV_TIMER) count++;
}
};
Вы можете использовать его следующим образом:
Counter::count = 0;
uv_walk(my_loop_ptr, &Counter::callback);
// Counter::count indicates how many active timers are running on the loop
Конечно, это не готовый к использованию код. Во всяком случае, я надеюсь, что это дает представление о предлагаемом решении.
Смотрите здесь для документации libuv.