该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
cpu的占有率是由进程的忙和空闲来决定的,即
rate=(busy_time)/(busy_time+idle_time);
怎么来控制她呢? busy可以用循环(这个循环用空循环,以便好控制),idle可以用sleep
比如先让任务管理器的cpu使用率始终保持在50%左右,那么在一个主循环中,
让空循环和sleep运行同样的一小段时间。sleep的时间好搞,空循环的怎么办呢?可以用cpu的主频估算出运行一个空循环所需要的时间,然后去设定空循环所要运行的次数,
比如:
while(true)
{
//for 循环运行x次,使它的时间和sleep的时间相等
for(int i=0;i
sleep(time);
}
这种要估算cpu的运行速度,不太方便,准确性也不高。
《编程之美》里面介绍一种好的方法。在运行的时候设定空循环的运行时间
int start_time=click();
while((click()-start_time)
这样就能使空循环运行runtime 毫秒
有了这个只要设定一下循环和sleep的比例就可以随意控制任务管理器中的cpu的使用率了,
下面用任务管理器画个弦函数图像
#include
#include
#include
#include
using namespace std;
int main()
{
const float PI=3.1416;
int count=180; //时间数组的个数
int idle[count];
int busy[count];
float delta=2*PI/count;
float alpha=0;
/*
给循环和sleep各生成一列时间数组
busy按照正弦规律变化,busy和对应的sleep的和不变
*/
for(int i=0;i
{
busy[i]=count*(sin(alpha)+1)/2;
idle[i]=count-busy[i];
alpha=alpha+delta;
cout<
}
int j=0;
int st_time;
while(true)
{
j=j%count;
st_time=clock(); //起始时间
while((clock()-st_time)
Sleep(idle[j]);
j++;
}
system("PAUSE");
return 0;
}
看完这些大家知道,怎么在任务管理器里画心了吧