【发布时间】:2018-05-03 20:55:25
【问题描述】:
Windows 8/10 中的 UWP(或“Metro”)应用在不在前台时经常被挂起。处于这种状态的应用会继续存在,但不再消耗 CPU 时间。引入此更改似乎是为了提高平板电脑和手机等低功耗/存储设备的性能。
请问,在这种状态下检测应用程序最优雅、最简单的方法是什么?
目前我可以看到两种可能的解决方案:
调用 NtQuerySystemInformation() 并枚举每个进程和每个线程。如果所有线程都处于挂起状态,则进程被“挂起”。这种方法需要大量代码,关键是 NtQuerySystemInformation() 只是半文档化的,可以在未来的操作系统中删除。 NtQueryInformationProcess() 也可以提供解决相同问题的方法。
调用 GetProcessTimes() 并记录每个进程的计数器。等待一段时间(分钟)并再次检查这些。如果进程计数器未更改,则假定进程已暂停。这是一个 hack,我可能会因为想到它而被击落。
吉姆
【问题讨论】:
标签: windows process power-management api