2

如何在 C 或 Python 中获得系统空闲时间(没有按下键 - 鼠标移动)?

编辑:我的程序在空闲时间 > 10 秒时暂停一个计数器

4

4 回答 4

2

我目前没有要测试的 Mac,因此无法确认它是否有效,但该线程似乎提供了您正在寻找的解决方案: http ://www.dssw.co.uk/sleepcentre/threads/ system_idle_time_how_to_retrieve.html

简而言之,使用subprocess模块并调用:

ioreg -c IOHIDSystem

然后解析输出,将该值除以 10^9 得到空闲时间(以秒为单位)。

于 2010-07-08T23:09:58.503 回答
0

那在 python ( win ) 中呢?像python标准库中的时间模块......?

于 2010-07-08T22:33:29.000 回答
0

您的应用程序是 GUI 驱动的吗?

如果是这样,您可以在 GUI 出现时启动一个计时器,然后在顶层进行键盘和鼠标回调。每次触发键盘或鼠标回调时,重置计时器。否则,当计时器关闭时,它的处理程序代码应该暂停您的计数器。

如果没有,请忽略这个... ;-)

于 2010-07-08T23:15:21.490 回答
0

如果您的意思是在程序执行过程中花费的时间,那么在程序完成后,最简单的事情就是运行 unix“时间”函数:

# echo foo
foo

# time echo foo
foo

real     0m0.000s
user     0m0.000s
sys  0m0.000s

如果您确实需要在程序运行时进行数据收集,那么还有一个更技术性的答案 - 我会为您看一下 unix 书......

更新:

clock_t 次(结构 tms *buf);

在联机帮助页或“UNIX 环境中的高级编程”的第 8.15 节中查找详细信息 - Stevens - 这类问题的圣经。

更新 2:

在另一个进程中运行“sar”(它就像 top 的标准输出打印版本),查找您想要的结果,并向进程发送信号。

或者,发布了有关“ioreg”的其他解决方案。

但是,如果您的程序本身本质上是“类似内核的”,并且其核心有一个大的动作循环,那么您可能会发现最好自己跟踪未使用的循环。否则,这是一个需要解决的重要问题。

于 2010-07-08T22:28:53.520 回答