程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 編寫程序 控制cpu占用率-4 繪制CPU使用率的正弦曲線

編寫程序 控制cpu占用率-4 繪制CPU使用率的正弦曲線

編輯:C#入門知識

在上一節中,講了通過 PerformanceCounter 進行CPU的占用率控制。

上一節連接:http://www.BkJia.com/kf/201110/107758.html

 

本屆中主要介紹如何實現控制CPU占用率曲線為一個正弦曲線。

 

在一段時間內,通過控制CPU繁忙時間調整CPU的占用率顯示。

 

代碼:

 
// cpu_4.cpp : Defines the entry point for the console application. 
// 
 
#include "stdafx.h" 
#include "stdlib.h" 
#include "stdio.h" 
#include "iostream" 
#include "math.h" 
#include "windows.h" 
 
using namespace std; 
 
const int SAMPLING_COUNT=200; 
const double PI=3.1415926; 
const int TOTAL_AMPLITUDE=250; 
 
int _tmain(int argc, _TCHAR* argv[]) 

    cout<<"test the cpu"<<endl; 
    DWORD cpuRate[SAMPLING_COUNT]; 
    int amplitude=TOTAL_AMPLITUDE/2; 
    double radian=0.0; 
    double radianIncrement=2.0/(double)SAMPLING_COUNT; 
 
    for(int i=0;i<SAMPLING_COUNT;i++) 
    { 
        cpuRate[i]=(DWORD)(amplitude+(sin(PI*radian)*amplitude)); 
        radian+=radianIncrement; 
    } 
 
    DWORD startTime=GetTickCount(); 
    for(int j=0;;j=(j+1)%SAMPLING_COUNT) 
    { 
        startTime=GetTickCount(); 
        while((GetTickCount()-startTime)<=cpuRate[j]) 
        { 
        } 
        Sleep(TOTAL_AMPLITUDE-cpuRate[j]); 
    } 
 
    return 0; 

解釋:

const int SAMPLING_COUNT=200; 定義一個正弦周期內的采樣點個數

const int TOTAL_AMPLITUDE=150; 定義一個調度時間片的大小,這樣通過這個時間片控制CPU的繁忙還有空閒時間。

DWORD cpuRate[SAMPLING_COUNT]; 記錄每一個采樣點的CPU的占用率,其實實際存儲的是CPU的繁忙時間的大小。
int amplitude=TOTAL_AMPLITUDE/2; 記錄半個時間片的大小,因為正弦函數的控制從中間開始,即sin0.

 double radianIncrement=2.0/(double)SAMPLING_COUNT; 記錄每一個采樣點的增量

for(int i=0;i<SAMPLING_COUNT;i++)
 {
  cpuRate[i]=(DWORD)(amplitude+(sin(PI*radian)*amplitude));
  radian+=radianIncrement;
 }

// 上面代碼循環計算每一個采樣點的CPU占用率,實際存儲的為CPU繁忙時間在這個時間片中的大小。通過控制繁忙時間的比例,控制CPU的占用率。

 

DWORD startTime=GetTickCount();
 for(int j=0;;j=(j+1)%SAMPLING_COUNT)
 {
  startTime=GetTickCount();
  while((GetTickCount()-startTime)<=cpuRate[j])
  {
  }
  Sleep(TOTAL_AMPLITUDE-cpuRate[j]);
 }

 

// 控制CPU在繁忙和空閒的兩個時間片中交互操作,從而實現控制CPU的占用率。

 

測試結果如果, 不同的時間片大小,結果不一樣。經過測試當時間片大小為150時,效果最好。

時間片大小為150:

 \

 

時間片大小為100:

\

 

還需要進一步調試,讓CPU的曲線更加完美。

摘自:Watkins.Song

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved