现在的位置: 首页 > 综合 > 正文

编程之美:第一章 1.1 让CPU占用率曲线听你指挥

2018年05月18日 ⁄ 综合 ⁄ 共 1307字 ⁄ 字号 评论关闭

/*
让CPU占用率曲线听你指挥:
写一个程序,让用户来决定Windows任务管理器的CPU占用率。实现下面的要求:
1 CPU的占用率固定在50%,为一条直线
2 CPU的占用率为一条直线,具体占用率由命令行参数决定(参数范围1~100)
3 CPU的占用率状态是一条正弦曲线

CPU的占用率 = CPU忙的时间(执行程序)/刷新周期总时间
System Idle Process占用了CPU空闲的时间
进程进入等待状态:等待输入,等待某事件的发生,主动进入休眠状态

关键:
让任务管理器的刷新时间内一会儿忙,一会儿闲,然后调节忙和闲的比例。
让CPU在一段时间跑busy和idle两个循环,通过时间比例,调节CPU。
busy循环可以执行空循环实现,而idle可以通过sleep来实现。
如何控制时间?别告诉我用随机数来做。

先sleep一段时间,然后循环n次,估算n的值

解法2:
DWORD GetTickCount(void):返回操作系统启动到现在经历的毫秒数
DWORD:= Double Word,每个word为2个字节的长度,每个字节是8位
用途:作为文件描述和硬件标志,长度固定的文本字符串
Int64:是由符号64位整数数据类型,=C++中的long long,8个字节。因为操作速度慢,不能用于循环变量
*/

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>//包含GetTickCount()函数的头文件
const int MAXSIZE = 9.6e6;

void letCpuControl_sleep()
{
 //大方向是一个死循环,然后忙通过,执行空循环来做,闲通过sleep来做
 for( ; ; )
 {
  for(int i = 0 ; i < MAXSIZE ;i++);
  _sleep(10);//_sleep(10);//注意,是_sleep不是sleep,unsigned _sleep(unsigned long):执行挂起时间
 }
}

const DWORD  _busyTime = 10;
const DWORD _idleTime = _busyTime;
_int64 _startTime = 0;
void letCpuControl_GetTickCount()
{
 while(true)
 {
  DWORD startTime = GetTickCount();//更新开始时间为系统开启到现在经历的时间
  while(GetTickCount() - startTime <= _busyTime);//总时间 - 开始时间
  _sleep(_idleTime);
 }
}

//让CPU能够显现出正弦曲线:我们把正弦曲线0~2pi之间的弧度等分成200份进行抽样,然后每隔300ms的时间取下
//一个抽样点,并让cpu工作对应的振幅()
void letCpuControl_sin()
{
}

void process()
{
 //letCpuControl_sleep();
 letCpuControl_GetTickCount();
 //letCpuControl_sin();
}

 

int main(int argc,char* argv[])
{
 process();
 getchar();
 return 0;
}

抱歉!评论已关闭.