编程之美 之 让CPU占用率听你指挥

昨天在bbs上淘到了这本编程之美,顺手刷了第一章,非常有意思。第一章的要求是要控制CPU曲线,绘制出相应的形状。 拿到这个问题,我的第一反应是,, 是不是有这么一个API,能在任务管理器上的相应区域直接绘制图形呢? 然后就去查找API, 可惜搜索能力不行,终于还是没有找到。 然后看书上的解释, 太棒了。

解决这道题目的核心是, CPU占用率的概念,应该是指 CPU忙的时间与总时间的比,他是一个平均值的概念。也就是说,通过控制CPU忙闲时间的比值,我们可以大致控制CPU的占用率。

通过这个思想可以 控制CPU绘制各种我们想要的图形 >_<

方波

sin波

直线

源码如下:

DrawSin(){system(“title sin”);const float PI = 3.1415926535;const int count = 360;const int GAP = 1;const DWORD totalTime = 200;float x = 0;float ratio[count] = { 0 };for (int i = 0; i != count; i++, x += GAP)ratio[i] = 0.5 * sin(PI * x / 180.0);for (int i = 0; TRUE; i = (i + 1) % count){DWORD startTime = GetTickCount();while (GetTickCount() – startTime < (0.5 + ratio[i]) * totalTime);Sleep((0.5 – ratio[i]) * totalTime);}}void DrawLinear(float ratio = 0.9){system(“title drawline”);const DWORD totalTime = 200;while (true){DWORD startTime = GetTickCount();while (GetTickCount() – startTime < ratio * totalTime);Sleep((1 – ratio) * totalTime);} }void DrawSquareWave(float max = 0.9, float min = 0.1){system(“title squareWave”);const DWORD totalTime = 200;const int count = 300;for (int i = 0; TRUE; i = (i + 1) % count){float ratio = (i > count / 2) ? max : min;DWORD startTime = GetTickCount();while (GetTickCount() – startTime < ratio * totalTime);Sleep((1 – ratio) * totalTime);}}void main(){// ===============【设置进程所在cpu】=================SetProcessAffinityMask(GetCurrentProcess(), 1);DrawLinear();//DrawSin();//DrawSquareWave();}

参考文章 编程之美:让CPU占用率曲线听你指挥

人生谁无少年时,甜苦酸辛各自知。

编程之美 之 让CPU占用率听你指挥

相关文章:

你感兴趣的文章:

标签云: