Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 8/10 API检测挂起的进程_Windows_Process_Power Management_Api - Fatal编程技术网

Windows 8/10 API检测挂起的进程

Windows 8/10 API检测挂起的进程,windows,process,power-management,api,Windows,Process,Power Management,Api,Windows 8/10中的UWP(或“Metro”)应用程序在不在前台时经常被挂起。处于此状态的应用程序继续存在,但不再占用CPU时间。这一变化似乎是为了提高平板电脑和手机等低功耗/存储设备的性能 请问,在这种状态下,检测应用程序最优雅、最简单的方法是什么 目前我可以看到两种可能的解决方案: 调用NtQuerySystemInformation()并枚举每个进程和每个线程。如果所有线程都处于挂起状态,则进程被“挂起”。这种方法需要大量代码,关键是NtQuerySystemInformation

Windows 8/10中的UWP(或“Metro”)应用程序在不在前台时经常被挂起。处于此状态的应用程序继续存在,但不再占用CPU时间。这一变化似乎是为了提高平板电脑和手机等低功耗/存储设备的性能

请问,在这种状态下,检测应用程序最优雅、最简单的方法是什么

目前我可以看到两种可能的解决方案:

  • 调用NtQuerySystemInformation()并枚举每个进程和每个线程。如果所有线程都处于挂起状态,则进程被“挂起”。这种方法需要大量代码,关键是NtQuerySystemInformation()只是半文档化的,可以在未来的操作系统中删除。NtQueryInformationProcess()也可能提供具有相同问题的解决方案

  • 调用GetProcessTimes()并记录每个进程的计数器。等待一段时间(分钟),然后再次检查这些。如果进程计数器没有更改,则假定进程已挂起。这是一个黑客,我可能会因为想到它而被击倒

  • Jim

    第二个(GetProcessTimes()…等待…然后再次检查这些 如果进程计数器未更改,则假定进程已挂起) 它的可靠性较低 如果进程正在等待输入(例如键盘、鼠标或网络) 而且没有得到任何,它将使用很少的CPU时间 而且似乎会因为这种方法而暂停