编写程序 控制cpu占用率-4 绘制CPU使用率的正弦曲线

本文介绍如何通过控制CPU繁忙时间来实现CPU占用率曲线呈现正弦形状。利用PerformanceCounter,设定采样点和时间片,计算并调整CPU的繁忙与空闲比例,以达到正弦曲线的效果。在不同时间片大小下进行测试,发现150作为时间片大小时表现最佳,后续将继续优化使曲线更精确。

在上一节中,讲了通过 PerformanceCounter 进行CPU的占用率控制。

上一节连接:

http://blog.csdn.net/weixingstudio/article/details/6867473

 

本届中主要介绍如何实现控制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的曲线更加完美。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值