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

原创 2011年10月12日 20:37:16

在上一节中,讲了通过 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的曲线更加完美。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixingstudio/article/details/6867666

《计算机体系结构 硬件篇2》之 CPU的组成

第一阶段:《计算机体系结构》课程 分成4篇:分别是硬件篇,软件篇,网络篇,行业篇 第二阶段:《嵌入式技术》课程 分成5部分:基础知识,高级单片机,linux嵌入式,安卓,项目
  • 2017年08月08日 20:11

控制台绘制正弦/余弦曲线

余弦曲线当然了,这里我们不用数组……否则就没技术含量了。正弦曲线的特点是左右对称,且左边部分的纵坐标是从1一直降到-1的,相应的右边的纵坐标是从-1一直递增到1。难点在于显示器只能按行输出,也就是说输...
  • NoMasp
  • NoMasp
  • 2015-04-30 05:32:40
  • 3244

MFC重绘控件使CPU占用100%解决方法

今天写想重绘CButton控件,于是重写了OnPaint函数,结果看CPU 50%(因为我是双核,如果单核估计就是100%了)经过调试发现 OnPaint函数一直在执行,没有发生重绘消息时也会执行。不...
  • ghevinn
  • ghevinn
  • 2012-11-30 17:04:56
  • 1756

MFC一个实时绘制风格为Windows资源管理器中cpu使用率曲线的程序 老外写的 很牛

  • 2014年05月12日 20:57
  • 16KB
  • 下载

<em>opencv</em> 画图库

<em>opencv</em>绘制点与坐标系 立即下载 上传者: Daky_u 时间: 2017-08-10 综合评分: 0 积分/C币:5 在<em>openCv</em>下画出<em>正弦</em>函数图像 立即下载 上传者: 秋水长天点...
  • 2018年04月17日 00:00

基于OpenCV的离散正弦变换

离散正弦变换(Discrete SineTransform, DST): 类似于DCT,离散正弦变换也有八种形式,常用的是DST-Ⅰ,一般我们提到DST而不特殊说明即指DST-Ⅰ。 这里直接给...
  • qq_35759050
  • qq_35759050
  • 2017-05-16 20:32:42
  • 525

win32画正弦曲线

#include #include // - 数学函数 #include // - C++格式化字符串需要 using namespace std; LRESULT CALLBACK Mywnd...
  • bladeandmaster88
  • bladeandmaster88
  • 2016-11-08 11:28:13
  • 732

OpenGL(一)绘制圆、五角星、正弦曲线

OpenGL入门之“顶点” OpenGL规定,一个多边形必须是一个“凸多边形”,即连接多边形上任意两点,其连线都在多边形内部。多边形可以由其边上的端点(这里可称为顶点)来确定。所以“顶点”的概念在图形...
  • dcrmg
  • dcrmg
  • 2016-11-06 23:11:24
  • 5603

全景图的种类及opencv实现

全景图概述 每当一个平面图像映射到一个弯曲的表面就会发生图象投影,反之亦然,这中现象特别常见于全景摄影。例如地球的球面可以映射到一块平坦的纸张。由于在我们周围的整个视场的可以被认为是作为球体的表面(对...
  • j_d_c
  • j_d_c
  • 2016-11-02 10:51:44
  • 1770

OpenCV——PS滤镜之 波浪效果 wave

// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include #...
  • shinian1987
  • shinian1987
  • 2016-02-23 10:11:06
  • 2012
收藏助手
不良信息举报
您举报文章:编写程序 控制cpu占用率-4 绘制CPU使用率的正弦曲线
举报原因:
原因补充:

(最多只允许输入30个字)