wäre es schön, wenn ich nur V8 oder Libuv fragen konnte, oder was auch immer
Sie können nicht direkt fragen libuv, aber es bietet sicherlich eine Möglichkeit, zu wissen, wie viele aktive Timer gibt.
Um dies zu tun, können Sie uv_walk
mit einer gültigen Schleife aufrufen, um alle aktiven Punkte zu erhalten. Dann können Sie jedes Handle mit dem gegebenen Callback überprüfen und diejenigen zählen, für die das Datenelement type
(das den Typ uv_handle_type
hat) gleich UV_TIMER
ist.
Das Ergebnis ist die Anzahl der aktiven Timer.
Weitere Details zur Handle-Datenstruktur finden Sie unter documentation.
Als triviales Beispiel betrachten wir die folgende Struktur:
struct Counter {
static int count;
static void callback(uv_handle_t* handle, void*) {
if(handle.type == uv_handle_type::UV_TIMER) count++;
}
};
Sie können es verwenden, wie es folgt:
Counter::count = 0;
uv_walk(my_loop_ptr, &Counter::callback);
// Counter::count indicates how many active timers are running on the loop
Natürlich ist dies kein serienreifes Code . Jedenfalls hoffe ich, dass es eine Vorstellung von der vorgeschlagenen Lösung gibt.
Siehe here für die libuv Dokumentation.
Glauben Sie, dass das Überschreiben der setTimeout-Methode mit einem Wrapper, der einen Counter verwaltet, Ihren Anforderungen entspricht? –
@DavidRissatoCruz das könnte funktionieren, yeah, obwohl, Sie müssten auch ClearTimeout monkeyypatch –