题目:写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率。程序越精简越好,计算机语言不限。例如,可以实现下面三种情况:
1. CPU的占用率固定在50%,为一条直线;
2. CPU的占用率为一条直线,但是具体占用率由命令行参数决定(参数范围1~ 100);
3. CPU的占用率状态是一个正弦曲线。
《编程之美》写道:“在任务管理器的一个刷新周期内,CPU忙(执行应用程序)的时间和刷新周期总时间的比率,就是CPU的占用率,也就是说,任务管理器中显示的是每个刷新周期内CPU占用率的统计平均值。”
代码如下:
1 #include "Windows.h"
2 #include "stdlib.h"
3 #include "math.h"
4
5 const double SPLIT = 0.01;
6 const int COUNT = 200;
7 const double PI = 3.14159265;
8 const int INTERVAL = 300;
9
10 int _tmain(int argc, _TCHAR* argv[])
11 {
12 SetProcessAffinityMask(
13 GetCurrentProcess(),
14 0x00000001 //cpu mask
15 );
16
17 DWORD busySpan[COUNT]; //array of busy times
18 DWORD idleSpan[COUNT]; //array of idle times
19 int half = INTERVAL / 2;
20 double radian = 0.0;
21 for(int i = 0; i < COUNT; i++)
22 {
23 busySpan[i] = (DWORD)(half + (sin(PI * radian) * half));
24 idleSpan[i] = INTERVAL - busySpan[i];
25 radian += SPLIT;
26 }
27 DWORD startTime = 0;
28 int j = 0;
29 while (true)
30 {
31 j = j % COUNT;
32 startTime = GetTickCount();
33 while ((GetTickCount() - startTime) <= busySpan[j]) ;
34 Sleep(idleSpan[j]);
35 j++;
36 }
37 return 0;
38 }