我正在使用JobObject限制进程的CPU使用率。我在运行Windows 10的两台计算机上运行我的代码,在一台计算机上它可以运行,但在另一台计算机上却不能运行,尽管所有WINAPI调用均成功返回。这是我的代码:
string jobName = "test_job";
HANDLE hJobObject = NULL;
hJobObject = CreateJobObject(NULL, jobName.c_str());
if (hJobObject == NULL) {
return -1;
}
JOBOBJECT_CPU_RATE_CONTROL_INFORMATION cpuRateInfo;
cpuRateInfo.ControlFlags = JOB_OBJECT_CPU_RATE_CONTROL_ENABLE | JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP;
cpuRateInfo.CpuRate = 10 * 100;
if (!SetInformationJobObject(hJobObject, JobObjectCpuRateControlInformation, &cpuRateInfo, sizeof(JOBOBJECT_CPU_RATE_CONTROL_INFORMATION))) {
return -1;
}
HANDLE currentProcessHandle = GetCurrentProcess();
if (!AssignProcessToJobObject(hJobObject, currentProcessHandle)) {
return -1;
}
任何想法导致此问题的原因是什么
答案 0 :(得分:0)
您应该首先验证当前流程是否在现有作业控制下正常工作。
添加以下代码行:
BOOL bInJob = FALSE;
IsProcessInJob(GetCurrentProcess(),NULL,&bInJob);
if (bInJob)
{
MessageBox(NULL,L"Process is in Job!",TEXT(""),MB_ICONINFORMATION | MB_OK);
return 0;
}
由于进程属于一个作业对象,因此无法将其分配给另一个作业对象。
此外,在启用Windows的
UAC
系统中, 提示特权已添加到默认兼容性系统JobObject
,因此必须使用CREATE_BREAKAWAY_FROM_JOB
参数将流程与 默认JobObject
。
希望能为您提供帮助。