Мне нужно контролировать использование CPU моего приложения до определенного предела. Мое приложение будет работать на Win XP, Vista, Win7 и Windows 8.
Я попытался реализовать, чтобы получить загрузку ЦП текущего процесса и использовать метод Sleep (). (Я использовал API GetProcessTimes& GetSystemTimes)
псевдокод:
for(;;)
{
//Get the current process's CPU Usage
int cpuUsage = CalculateCPUUsage();
if(cpuUsage > 50)
Sleep(10)
else
{
//Project implementation code
}
}
Вопрос:
Могу ли я написать приложение для отслеживания загрузки ЦП процесса и, когда ЦП достигает допустимого предела, останавливать процесс и продолжать его.
Заранее спасибо за помощь.
Если вы просто пытаетесь придать процессу более низкий приоритет, чтобы быть лучше для других потоков, вы можете установить его приоритет с помощью SetThreadPriority, например:
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL);
Вы можете ограничить использование ЦП вашего процесса или любого другого процесса, добавив интересующий процесс к объекту Job и наложив ограничения на объект Job.
Одним из ограничений ресурсов, которые можно настроить для объектов Job, является использование процессора:
JOBOBJECT_BASIC_LIMIT_INFORMATION
доступно с Windows XP и 2003JOBOBJECT_CPU_RATE_CONTROL_INFORMATION
Новое в Windows 8 и Server 2012.Если вам нужно использовать подход, предшествующий Windows 8, обратите особое внимание на примечание:
Чтобы зарегистрироваться для уведомления о превышении этого лимита без завершения процессов, используйте функцию SetInformationJobObject с информационным классом JobObjectNotificationLimitInformation