void CPUSin() { const int SAMPLE_COUNT = 100; const double PI = 3.1415926536; const int SAMPLE_TIME = 400; double radian = 0.0; double radian_delta = 2 * PI / double(SAMPLE_COUNT); DWORD Sample_Value[SAMPLE_COUNT]; for(int i = 0; i < SAMPLE_COUNT; ++i){ Sample_Value[i] = sin(radian) * SAMPLE_TIME / 2 + SAMPLE_TIME/2; radian += radian_delta; } int j = 0; while(true) { DWORD startTime = GetTickCount(); while((GetTickCount() - startTime) <= Sample_Value[j]) ; Sleep(SAMPLE_TIME - Sample_Value[j]); j = (++j)%SAMPLE_COUNT; } }
让cpu呈现正弦曲线就需要理解离散信号。在一个周期内每隔一个小间隔就采样一个值就构成一个离散序列
本题就是让cpu使用率采样成正弦分布。
cpu的使用率在一个采样间隔里面是可以控制的。具体控制的方法就是用while循环控制cpu执行的时间片,用sleep控制cpu空闲的时间片,让比例呈现正弦分布即可。
为了达到这个目的,我们首先将CPU的执行时间片先算出来,它是成正弦分布的
同时需要注意的是:sin是有正负的,我们其实要的是所有值在零上的正弦曲线,也就是y = A(sinx + 1)的这种曲线,所以在计算sample_Value的时候一定要注意