在《编程之美》上面,作者给的解法考虑到了其他程序对cpu的占用而影响最终曲线形状的问题。作者调用了windows的API,而我的系统是linux系统,没有图形化的界面可显示cpu运行曲线,所以我就省力只打印此程序的cpu占用情况,然后根据此程序的cpu占用值验证程序的正确性。
/*
* 使cpu的运行图像向一条正弦曲线
* StoryMonster 2016/7/15
*/
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <ctime>
int main()
{
const double pi = 3.1415926;
//本例中将一个正弦周期等分为20,使每一个时间常量为2*pi/20;
unsigned int currentTimeCount = 0;
while(true)
{
unsigned int busy = sin(currentTimeCount*2*pi/20)*500 + 500;
unsigned int relax = 1000 - busy;
usleep(relax*1000);
clock_t tim1 = clock();
clock_t tim2 = clock();
while(tim2 - tim1 < busy*1000) tim2 = clock();
currentTimeCount++;
if(currentTimeCount==20) currentTimeCount = 0;
}
return 0;
}