检测用户何时空闲 X 时间,然后检测用户何时立即活跃的最佳方法是什么?
我知道有 NSWorkspace 提供将/已睡眠/唤醒通知,但我不能依赖它,因为睡眠设置通常约为 15 分钟到永远不会。我需要能够检测用户是否空闲了约 1-2 分钟。
这个答案提供了一种获取空闲时间的方法。如果可能的话,我想避免轮询。
检测用户何时空闲 X 时间,然后检测用户何时立即活跃的最佳方法是什么?
我知道有 NSWorkspace 提供将/已睡眠/唤醒通知,但我不能依赖它,因为睡眠设置通常约为 15 分钟到永远不会。我需要能够检测用户是否空闲了约 1-2 分钟。
这个答案提供了一种获取空闲时间的方法。如果可能的话,我想避免轮询。
据我所知,投票是你唯一的选择。正如 user1118321 指出的那样,每 O(分钟)轮询一次不太可能导致任何问题、性能或其他问题。
如果您的应用程序有一个 GUI 并接收 UI 事件,您可以安装一个处理程序,通过+[NSEvent addLocalMonitorForEventsMatchingMask:handler:]
它在每个事件上重置您的计时器。当用户持续活跃时,至少在您自己的应用程序中,这将有助于减少(如果不是消除)民意调查。
一旦您确定用户已经闲置了足够长的时间,您就可以安装一个全局事件水龙头来监视下一个事件。参见例如-[NSEvent addGlobalMonitorForEventsMatchingMask:handler:]
。
注意:你应该CGEventSourceSecondsSinceLastEventType
尽可能使用而不是进入 IO 注册表。这是一个正式的、受支持的 API,可能更有效。更不用说它更简单。还有UKIdleTimer虽然它依赖于 Carbon,所以可能不适用。