编程之美——CPU占用率

写一个程序,让用户决定Windows任务管理器的CPU占用率。
1. 50%CPU占用率。
2. 任意比例。
3. 正弦曲线。

  • 解法一:简单的解法

假设CPU是2.4GHz(2.4 * 10的9次方个时钟周期每秒),CPU执行的是机器指令,最接近机器指令的语言是汇编语言,如下空循环翻译成5条汇编代码。( 2 400 000 000 * 2 ) / 5 = 960 000 000 (循环/秒)。若让CPU工作1秒钟,然后休息1秒钟,波形很可能变成锯齿状。所以降低两个数量级,同时10ms比较接近windows的调度时间片。

#include <stdio.h>
#include <Windows.h>

int main() {
    for (; ;) {
        for (int i = 0; i < 9600000; i++) {
            ;
        }
        Sleep(10);
    }
};

怎么让CPU“闲下来”?
—-> 或者等待用户的输入,或者等待某些事件发生,或者主动进入休眠状态。

  • 解法二:使用GetTickCount()和Sleep()
    GetTickCount()可以得到“系统启动到现在”所经历时间的毫秒值。
    const DWORD busyTime = 10;
    const DWORD idleTime = busyTime;

    while(true) {
        DWORD startTime = GetTickCount();

        while ( (GetTickCount() - startTime) <= busyTime )
            ;

        Sleep(idleTime);
    }
  • 解法三:能动态适应的解法
static void MakeUsage(float level)
{
    PerformanceCounter p = new PerformanceCounter("Processor", "%Processor Time", "_Total");

    while (true)
    {
        if (p.NextValue() > level)
            System.Threading.Thread.Sleep(10);
    }
}
  • 解法四:正弦曲线
    原文作者:The_Hungry_Brain
    原文地址: https://blog.csdn.net/u010129119/article/details/52549874
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞