第1章 游戏之乐 让cpu 占用率曲线听你的指挥

1.1让cpu 占用率曲线听你的指挥:

解法一:代码清单1-1

int main()

{

    for(; ;

     {

    //CPU 一秒执行的次数

        for(int i = 0; i <9600000; i++)

             ;

        Sleep(10);

     }

     return 0;

}


解法二:代码清单1-2:

int busyTime =10;           // 10 ms

int idleTime =busyTime;    // same ratio will lead to50% cpu usage

 

Int64 startTime =0;

while(true)

{

     startTime = GetTickCount();   

     // busy loop

     while((GetTickCount() - startTime)<= busyTime)

          ;

 

     // idle loop

     Sleep(idleTime);

}

解法三:能动态适应的解法

// C# code

static void MakeUsage(float level)

{

     PerformanceCounter p = new PerformanceCounter("Processor",  "%Processor Time","_Total");     


     if(p==NULL)

     {

          return

     }

 

     while(true)

     {

          if(p.NextValue() > level)

               System.Threading.Thread.Sleep(10);

     }

}

解法四:让cpu显示成正弦曲线

// C++ code to maketask manager generate sine graph

#include"Windows.h"

#include"stdlib.h"

#include"math.h"

 

const double SPLIT= 0.01;

const int COUNT =200;

const double PI =3.14159265;

const int INTERVAL= 300;

 

int _tmain(intargc, _TCHAR* argv[])

{

     DWORD busySpan[COUNT];      // array of busy times   

     DWORD idleSpan[COUNT];      // array of idle times

     int half = INTERVAL / 2;

     double radian = 0.0;

     for(int i = 0; i < COUNT; i++)

     {

          busySpan[i] = (DWORD)(half + (sin(PI * radian) * half));

          idleSpan[i] = INTERVAL - busySpan[i];

          radian += SPLIT;

     }

 

     DWORD startTime = 0;

     int j = 0;

     while(true)

     {

          j = j % COUNT;

          startTime = GetTickCount();

          while((GetTickCount() - startTime) <= busySpan[j])

              ;

          Sleep(idleSpan[j]);

          j++;

     }

     return 0;

}

总结:调用windows API实现程序对cpu占用率的控制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值