/*
让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; }