byłoby miło, gdybym mógł po prostu poprosić V8 lub Libuv lub cokolwiek
Nie można bezpośrednio zapytać libuv, ale z pewnością jest sposobem, aby wiedzieć, ile aktywnych czasomierze są tam.
Aby to zrobić, możesz wywołać uv_walk
z poprawną pętlą, aby uzyskać wszystkie aktywne uchwyty. Następnie możesz sprawdzić każdy uchwyt z danym wywołaniem zwrotnym i policzyć te, dla których element danych type
(który ma typ uv_handle_type
) jest równy UV_TIMER
.
Wynikiem jest liczba aktywnych timerów.
Więcej informacji na temat struktury danych uchwytów można znaleźć w dokumencie documentation.
Jako trywialny przykład rozważmy następującą strukturę:
struct Counter {
static int count;
static void callback(uv_handle_t* handle, void*) {
if(handle.type == uv_handle_type::UV_TIMER) count++;
}
};
można go używać jak to następująco:
Counter::count = 0;
uv_walk(my_loop_ptr, &Counter::callback);
// Counter::count indicates how many active timers are running on the loop
Oczywiście, to nie jest kod produkcji gotowych . W każdym razie, mam nadzieję, że da to pojęcie proponowanego rozwiązania.
Zobacz dokumentację libuv w dokumencie here.
Czy sądzisz, że nadpisanie metody setTimeout za pomocą opakowania, które obsługuje licznik, odpowiada Twoim potrzebom? –
@DavidRissatoCruz, które mogą działać, tak, chociaż musisz też dodać monkeypatch clearTimeout –