都說電腦編程乏味,可是好多程式員卻玩地津津有味。電腦的世界什麼都可以用來做為程式員的遊戲,比如CPU。下面就讓我們來讓Windows下的工作管理員聽我們指揮,畫出完美的正弦曲線吧。
思路:
0、目測windows下工作管理員重新整理頻率為1s,每一次重新整理的CPU佔用率其實就是這一時間段的 忙碌時間 / 全部時。
1、用迴圈和sleep方法來實現任一值的CPU佔用率。
2、既然要畫正弦曲線,之前先用兩個數組busyTime[]和idleTime[]確定好迴圈與sleep時間。
注意:
1、假設系統當前只有當前程式運行
2、雙核系統下運行一個死迴圈其中一個CPU佔用率100%,另一個無影響
源碼:
#include "stdafx.h"<br />#include "windows.h"<br />#include "math.h"</p><p>//C++ code to make task manager generate sine graph<br />const double SPLIT = 0.01;<br />const int COUNT = 200;<br />const double PI = 3.14159265;<br />const int INTERVAL = 300;</p><p>int _tmain(int argc, _TCHAR* argv[])<br />{<br />DWORD busySpan[COUNT]; //array of busy times<br />DWORD idleSpan[COUNT]; //array of idle times<br />int half = INTERVAL / 2;<br />double radian = 0.0;<br />for(int i=0;i<COUNT;i++){<br />busySpan[i] = (DWORD)(half+(sin(PI*radian)*half));<br />idleSpan[i] = INTERVAL - busySpan[i];<br />radian += SPLIT;<br />}<br />DWORD startTime = 0;<br />int j = 0;<br />while(true){<br />j = j%COUNT;<br />startTime = GetTickCount();<br />while((GetTickCount()-startTime)<=busySpan[j])<br />;<br />Sleep(idleSpan[j]);<br />j++;<br />}<br />return 0;<br />}<br />
結果: