我需要将应用程序的CPU使用率控制到一定限度。我的应用程序将在Win XP,Vista,Win7和Windows 8上运行。
我尝试实现以获取当前进程的CPU使用率并使用Sleep()方法。(我使用了API GetProcessTimes& GetSystemTimes)
伪代码:
for(;;)
{
//Get the current process's CPU Usage
int cpuUsage = CalculateCPUUsage();
if(cpuUsage > 50)
Sleep(10)
else
{
//Project implementation code
}
}
问题:
我是否可以编写一个应用程序来监控进程的CPU使用率,每当CPU达到允许的限制时,停止该进程并继续它。
提前感谢您的帮助。
答案 0 :(得分:1)
您可以通过向Job对象添加感兴趣的进程并对Job对象设置限制来限制进程或任何其他进程的CPU使用率。
可以为Job对象配置的资源限制之一是CPU使用率:
JOBOBJECT_BASIC_LIMIT_INFORMATION
自Windows XP和2003起可用JOBOBJECT_CPU_RATE_CONTROL_INFORMATION
Windows 8和Server 2012中的新功能。如果您必须使用Windows 8之前的方法,请注意注意事项:
要在超过此限制时注册通知而不终止进程,请使用带有JobObjectNotificationLimitInformation信息类的SetInformationJobObject函数
答案 1 :(得分:1)
如果您只是尝试为进程设置较低优先级以便更好地使用其他线程,则可以使用SetThreadPriority设置其优先级,例如:
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL);