在Windows计算机上识别空闲状态

3
我知道GetLastInputInfo方法,但它只能给我上一次用户输入(键盘或鼠标)的持续时间。如果用户输入是在10分钟前收到的,那并不意味着系统已经空闲了10分钟——扫描、下载、电影等原因。

那么我们如何确定系统是否真正处于空闲状态?

有人知道Windows对“空闲”的定义吗?必须是阈值的组合——例如低于5%的CPU利用率、低于3%的磁盘利用率等——以及用户输入参数……有人知道确切的定义吗?


类似问题:https://dev59.com/pknSa4cB1Zd3GeqPNmiq - gwell
2个回答

2

“空闲”没有一个确切的定义。它应该是你想要的任何状态。


Windows的定义是什么?或者微软希望它成为什么? :) - Sameet
我认为没有硬性规定,这取决于应用程序。 - Daniel A. White

2
由于大多数Windows应用程序都是基于UI的,而Windows UI是通过从消息队列获取消息来驱动的,因此定义应用程序何时处于“空闲”状态的一种常见方法是当其消息队列中没有消息时。在典型的应用程序中,总会有消息在飞来飞去(用户生成和系统生成的),但您会看到频繁的短暂空闲期。当鼠标移动到您的应用程序窗口上时,您的空闲时间将降至接近零,直到鼠标停止移动,因为鼠标活动会产生大量的消息活动。
因此,在您的Windows应用程序的消息循环中,如果您当前正在使用GetMessage,则需要更改您的循环以使用PeekMessage。当消息队列为空时,GetMessage会阻塞,直到有消息到达。如果消息队列中没有消息,PeekMessage返回true,否则返回false。使用标志,您可以使PeekMessage在同一调用中获取消息。
当PeekMessage返回false时,您可以将执行转向您的“空闲”任务,而不是等待下一条消息。
在WinForms应用程序中,请使用Application.Idle事件。
不过在你的空闲代码中不要做太多事情,否则你的用户界面会感到迟缓,因为消息没有被快速处理。过度使用空闲周期也会使你的 CPU 运行热,并耗尽笔记本电池。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接