CPU使用率限制
windows cpu使用率限制
程序运行中,调用第三方的sdk接口,有些sdk中线程数无法控制,100%占用cpu,这时,为了是其他进程能正常运行,需要当前进程的cpu使用率。以下通过限制对多核cpu,设置进程的亲和cpu。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #include <Windows.h> void limitCpu(int rate) { SPDLOG_INFO("init CPU: {}", rate); if (rate < 0) { return; } SYSTEM_INFO sysInfo; GetSystemInfo(&sysInfo); int cpu_usage = sysInfo.dwNumberOfProcessors * rate / 100; cpu_usage = cpu_usage < 1 ? 1 : cpu_usage; int64_t affinity_mask = static_cast<int>(std::pow(2, cpu_usage)) - 1; HANDLE process = GetCurrentProcess(); SetProcessAffinityMask(process, affinity_mask);
}
limitCpu(80);
|