让CPU占用率画出正弦曲线

来源:互联网 发布:白金数据l先生是谁 编辑:程序博客网 时间:2024/06/05 09:05

让CPU占用率画出正弦曲线

分类: 编程之美
math.hwindowsmanager任务编程游戏

都说计算机编程乏味,可是好多程序员却玩地津津有味。计算机的世界什么都可以用来做为程序员的游戏,比如CPU。下面就让我们来让Windows下的任务管理器听我们指挥,画出完美的正弦曲线吧。

 

思路:

0、目测windows下任务管理器刷新频率为1s,每一次刷新的CPU占用率其实就是这一时间段的 忙碌时间 / 全部时。

1、用循环和sleep方法来实现任一值的CPU占用率。

2、既然要画正弦曲线,之前先用两个数组busyTime[]和idleTime[]确定好循环与sleep时间。

 

注意:

1、假设系统当前只有当前程序运行

2、双核系统下运行一个死循环其中一个CPU占用率100%,另一个无影响

 

源码:

[cpp] view plaincopy
  1. #include "stdafx.h"  
  2. #include "windows.h"  
  3. #include "math.h"  
  4.   
  5. //C++ code to make task manager generate sine graph  
  6. const double SPLIT = 0.01;  
  7. const int COUNT = 200;  
  8. const double PI = 3.14159265;  
  9. const int INTERVAL = 300;  
  10.   
  11. int _tmain(int argc, _TCHAR* argv[])  
  12. {  
  13.     DWORD busySpan[COUNT]; //array of busy times  
  14.     DWORD idleSpan[COUNT]; //array of idle times  
  15.     int half = INTERVAL / 2;  
  16.     double radian = 0.0;  
  17.     for(int i=0;i<COUNT;i++){  
  18.         busySpan[i] = (DWORD)(half+(sin(PI*radian)*half));  
  19.         idleSpan[i] = INTERVAL - busySpan[i];  
  20.         radian += SPLIT;  
  21.     }  
  22.     DWORD startTime = 0;  
  23.     int j = 0;  
  24.     while(true){  
  25.         j = j%COUNT;  
  26.         startTime = GetTickCount();  
  27.         while((GetTickCount()-startTime)<=busySpan[j])  
  28.             ;  
  29.         Sleep(idleSpan[j]);  
  30.         j++;  
  31.     }  
  32.     return 0;  
  33. }  

0 0