было бы неплохо, если бы я мог просто спросить V8 или Libuv или что-то
Вы не можете непосредственно спросить libuv, но это, безусловно, предлагает способ узнать, сколько активных таймеров есть.
Для этого вы можете вызвать uv_walk
с действительным циклом, чтобы получить все активные ручки. Затем вы можете проверить каждый дескриптор с данным обратным вызовом и подсчитать те, для которых элемент данных type
(имеющий тип uv_handle_type
) равен UV_TIMER
.
В результате получается количество активных таймеров.
Для получения дополнительной информации о структуре данных рукоятки см. documentation.
В качестве простейшего примера рассмотрим следующую структуру:
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
Конечно, это не готовый к производству код , Во всяком случае, я надеюсь, что это дает представление о предлагаемом решении.
См. here для документации libuv.
Вы считаете, что переписывание метода setTimeout с помощью обертки, управляющей счетчиком, будет соответствовать вашим потребностям? –
@DavidRissatoCruz, который мог бы работать, да, хотя, вам также нужно было бы обезглавить clearTimeout –