javascript - 在 Node.js 事件循环中获取(事件)计时器的计数

标签 javascript node.js settimeout v8 libuv

有没有办法在 Node.js 中调用以确定事件循环队列中的计时器数量?我有一个带有多个超时的库,而不是使用某种内部簿记系统自己跟踪它们,如果我可以只问 V8 或 Libuv 或其他什么,有多少个计时器,那就太好了。

这可能吗?

最佳答案

it would be nice if I could just ask V8 or Libuv or whatever

您不能直接询问 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 文档。

关于javascript - 在 Node.js 事件循环中获取(事件)计时器的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41354103/

相关文章:

for 循环内的 JavaScript setTimeout 函数仅发生一次

javascript - 下拉菜单不起作用 - Bootstrap

javascript - 在 JS/Prototype 中获取一个月中的天数

javascript - 如何将数据库系统添加到WebGL应用程序

javascript - jquery 将剩余时间恢复为花费时间 .setTimeout()

javascript - 计时器如何在 Javascript 中工作?

javascript - 无法在面板内获取下拉列表

javascript - 如何使 jQuery Mask 插件显示价格时使用句点而不是逗号?

node.js - 使用sequelize调用存储过程

javascript - 渲染 EJS 模板并将其保存为文件