You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

事件处理器设置的属性值始终无变化问题排查

问题根因

你的代码逻辑存在两个明显问题:

  • 每当setInterval触发generateActivity执行,都会重新创建一个初始值全为0的全新状态对象o。事件回调里修改的是之前函数执行时生成的旧o对象,和当前刚创建的新对象没有任何关联,所以打印结果永远显示0。
  • 每1秒就会重复注册一次keydown、mousemove事件监听器,程序运行越久,堆在内存里的监听器越多,既会造成内存泄漏,也会导致事件触发时重复执行无意义的赋值操作。
正确实现

状态对象初始化、事件监听注册只需要执行一次,不需要放进定时器回调里。定时器只需要负责每秒读取状态、按需重置状态即可:

// 初始化活动状态,仅执行一次
const activityStatus = { is_mouse: 0, is_keyboard: 0 };

// 注册全局事件监听,仅执行一次
uiohook.uIOhook.on('keydown', () => {
  activityStatus.is_keyboard = 1;
});

uiohook.uIOhook.on('mousemove', () => {
  activityStatus.is_mouse = 1;
});

// 每秒轮询状态
setInterval(() => {
  console.log(activityStatus);
  // 如果你的需求是统计每一秒区间内是否有对应活动,打印完成后必须重置状态
  // 否则值一旦被设为1就会一直保持,后续统计会失效
  activityStatus.is_mouse = 0;
  activityStatus.is_keyboard = 0;
}, 1000);

内容的提问来源于stack exchange,提问作者Brian Millot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:33:31