直接问AI就行了
[C++] 纯文本查看 复制代码 #include <windows.h>
#include <stdio.h>
// 主程序入口
int main() {
// 创建 Job 对象,用于管理多个进程的资源使用
HANDLE hJob = CreateJobObject(NULL, NULL);
if (hJob == NULL) {
printf("创建 Job 对象失败。错误代码: %d\n", GetLastError());
return 1;
}
// 设置 CPU 使用率限制,20% CPU
JOBOBJECT_CPU_RATE_CONTROL_INFORMATION cpuRateInfo = {0};
cpuRateInfo.ControlFlags = JOB_OBJECT_CPU_RATE_CONTROL_ENABLE | // 启用 CPU 控制
JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP; // 使用硬性限制
cpuRateInfo.CpuRate = 2000; // 设置为20% CPU使用率(单位:1/10000)
// 将限制信息应用到 Job 对象
if (!SetInformationJobObject(
hJob,
JobObjectCpuRateControlInformation,
&cpuRateInfo,
sizeof(cpuRateInfo))) {
printf("设置 CPU 限制失败。错误代码: %d\n", GetLastError());
CloseHandle(hJob); // 释放 Job 句柄
return 1;
}
// 打开目标进程,这里需要将 processID 替换为你要限制的进程 ID
DWORD processID = 12345; // 示例进程ID,请替换为实际的进程ID
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID);
if (hProcess == NULL) {
printf("打开进程失败。错误代码: %d\n", GetLastError());
CloseHandle(hJob); // 释放 Job 句柄
return 1;
}
// 将进程添加到 Job 对象中,使其受 CPU 限制的控制
if (!AssignProcessToJobObject(hJob, hProcess)) {
printf("将进程分配到 Job 失败。错误代码: %d\n", GetLastError());
CloseHandle(hProcess); // 释放进程句柄
CloseHandle(hJob); // 释放 Job 句柄
return 1;
}
printf("进程成功添加到 Job,并设置了 CPU 使用率限制。\n");
// 使用 getchar() 阻止程序退出,以保持 Job 的有效性
printf("按回车键退出程序...\n");
getchar();
// 关闭句柄,释放资源
CloseHandle(hProcess);
CloseHandle(hJob);
return 0;
}
补充内容 (2024-10-16 05:49):
难点在于使用率的设置,太低容易卡死,太高又没效果
所以还不如写个循环不停地暂停恢复进程,之前看过一个降低CPU使用率的程序就是这么实现的 |