在《編程之美》上有這麼一道題,題目是:編程讓CPU的佔用率呈正弦曲線變化。 初看這題基本沒什麼思路,後來瞭解到CPU佔用率的計算公式就找到突破口了。
CPU佔用率計算公式:
CPU佔用率 = 已耗用時間/總時間 x 100%
有了上面的公式,只需要讓一個時間片內啟動並執行時間占該時間片的比例呈正弦變化即可。
//正弦曲線的
double time = 0.0 ;
double runtime ;
int c;
while(1)
{
runtime = 100 + 100 * sin(time);
time += 0.05 ;
c = clock();
while(clock() - c < runtime );
Sleep(200 - runtime );
}
//橫線的
while(1)
{
int start = clock();
while(clock() - start < 10 );
Sleep(10);
}
//單向斜線的
int k = -1;
int c = 0;
int runtime ;
while(1)
{
runtime = 100 + k * ( c++ % 101 ) ;
int start = clock();
while(clock() - start < runtime );
Sleep(100 - runtime );
}
//雙向斜線的
int k = 1 ;
int c = 0;
int runtime ;
while(1)
{
runtime = (int)(c<100) * ( 100 + -1 * ( c % 100 )) + (int)(c>100) * (c-100);
c = c++ % 200 ;
int start = clock();
while(clock() - start < runtime);
Sleep(100 - runtime );
}
正弦曲線的效果
單向斜線的效果
雙向斜線的效果