编程之美--控制cpu正余弦曲线(代码解释)
将cpu控制在50%的占用率
cpu对于占用率的计算方式是:
一个时间周期内cpu执行时间与总周期的比率。
所以将cpu占用率控制在常数时间非常容易,只需要将程序执行时间与挂起时间对半分。执行的使用一个忙循环,挂起需要使用window.h中的Sleep()方法。
将cpu的占用率控制在一个正弦曲线
将cpu占用率控制在正弦曲线在现代电脑上比较难运行实现。
但是也可以假设我们使用的是一个单核cpu的机器:
-
划分时间周期
-
为每个时钟周期确定一个点。点通过确定周期内的忙循环时间确定。
-
将所有时间周期执行出来。
include <windows.h>
include <stdlib.h>
include <math.h>
const double SPLIT = 0.01;
const int COUNT = 200;
const double PI = 3.14159265;
const int INTERVAL = 300;int main()
{
DWORD busySpan[COUNT]; //array of busy times
DWORD idleSpan[COUNT]; //idleint half = INTERVAL/2;
double radian = 0.0;
for (int i = 0; i < COUNT; i++)
{
busySpan[i] = (DWORD)(half + sin(PI * radian) * half);
idleSpan[i] = INTERVAL - busySpan[i];
radian += SPLIT;
}DWORD startTime = 0;
int j = 0;
while(true)
{
j = j % COUNT;
startTime = GetTickCount();
while((GetTickCount() - startTime) <= busySpan[j])
;
Sleep(idleSpan[j]);
j++;
}
return 0;
}
学习收获
我学习到了win系统中cpu占用率的计算方式,以及在C++中应该如何进行系统级编程,尤其是一些函数。
另外,也体会到了一种逻辑性思考,对于cpu画正弦曲线的操作以我现在的水平肯定是一脸懵的。但是通过一点点的查阅资料,包括占用率的计算方式,如何进行挂起,这样我们才能对问题进行数学建模。可见一个刚刚还觉得不可能做到的事情也可以很快找到解决的方法,可能这就是编程之美吧。