题目:写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率。程序越精简越好,计算机语言不限。例如,可以实现下面三种情况:
1. CPU的占用率固定在50%,为一条直线;
2. CPU的占用率为一条直线,但是具体占用率由命令行参数决定(参数范围1~ 100);
3. CPU的占用率状态是一个正弦曲线。
首先,什么是CPU占用率真?《编程之美》写道:“在任务管理器的一个刷新周期内,CPU忙(执行应用程序)的时间和刷新周期总时间的比率,就是CPU的占用率,也就是说,任务管理器中显示的是每个刷新周期内CPU占用率的统计平均值。”
书中提到了多种方法 ,前面几种简单的都是对应单核CPU的。
第一种是通过CPU的主频计算出在一秒种内CPU能运行的空循环次数,再调节忙/闲的时间比(闲时间设为10ms,使接近于系统调度的时间片),此法在双核CPU上运行看不到任何效果。
第二法方法用到了GetTickCount来获取“系统从启动到现在”经历的毫秒值,通过统计的方法来调节时间比。
using System;
using System.Text;
using System.Threading;
namespace _50persentCPU
{
class Program
{
static void Main(string[] args)
{
int busyTime = 10;
int startTime = Environment.TickCount;
Console.WriteLine(startTime .ToString ());
while (true)
{
startTime = Environment.TickCount;
while (Environment.TickCount - startTime <= busyTime)
{
//Console.WriteLine(Environment.TickCount.ToString());
}
Thread.Sleep(10);
}
}
}
}
程序运行截图1: