编程之美--控制cpu正余弦曲线(代码解释)

将cpu控制在50%的占用率

cpu对于占用率的计算方式是:

一个时间周期内cpu执行时间与总周期的比率。

所以将cpu占用率控制在常数时间非常容易,只需要将程序执行时间与挂起时间对半分。执行的使用一个忙循环,挂起需要使用window.h中的Sleep()方法。

将cpu的占用率控制在一个正弦曲线

将cpu占用率控制在正弦曲线在现代电脑上比较难运行实现。
但是也可以假设我们使用的是一个单核cpu的机器:

  1. 划分时间周期

  2. 为每个时钟周期确定一个点。点通过确定周期内的忙循环时间确定。

  3. 将所有时间周期执行出来。

    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]; //idle

    int 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画正弦曲线的操作以我现在的水平肯定是一脸懵的。但是通过一点点的查阅资料,包括占用率的计算方式,如何进行挂起,这样我们才能对问题进行数学建模。可见一个刚刚还觉得不可能做到的事情也可以很快找到解决的方法,可能这就是编程之美吧。