编程之美的第一个问题,我的机器是双核的,用文中的代码,得到的曲线波动比较大额,受其他进程的影响比较大。文中提到10ms接近windows的调度时间片,如果选得太小,会造成线程被频繁唤醒和挂起,造成内核不稳定。
#include
"windows.h"
#include "stdlib.h"
#include "math.h"
// 时间片的尺度大概是 10 ms
void control_cpu_percentage(
int per) {
DWORD sleep_time =
30;
//ms
DWORD busy_time = per * sleep_time / (
100 -
per);
DWORD start =
GetTickCount();
while (
true) {
while (GetTickCount() - start <=
busy_time);
Sleep(sleep_time);
start =
GetTickCount();
}
}
int main() {
SetThreadAffinityMask(GetCurrentThread(), 0);
control_cpu_percentage(30);
//while(1);
}
转载于:https://www.cnblogs.com/litstrong/p/3306239.html