Linux与Windows控制CPU使用率曲线
效果图如下:
Ubuntu Linux下截图
Windows下截图
其实程序的设计思想很简单,Windows任务管理器中CPU使用率基本上1s刷新一次,而CPU使用率其实就是在1s中CPU忙和闲时间的均值。因此,根据我们想要得到的CPU曲线的特点,我们首先做出忙闲时间的表,CPU根据忙闲时间选择执行或挂起。
代码如下:
#include #define COUNT 200 const double SPLIT = 0.01; DWORD WINAPI SineThread(LPVOID Sine) for (i=0; i DWORD WINAPI SawThread(LPVOID Saw) for (i=0; i int main() hThread1 = CreateThread(NULL, 0, SineThread, 0, CREATE_SUSPENDED, &dwThreadId1);
#include
#include
const double PI = 3.14159265;
const double SLOPE = 150;
const int INTERVAL = 300;
{
DWORD busySpan[COUNT];
DWORD idleSpan[COUNT];
int half = INTERVAL/2;
double radian = 0.0;
DWORD startTime;
int i;
busySpan[i] = (DWORD)(half + half*sin(PI*radian));
idleSpan[i] = (DWORD)(INTERVAL – busySpan[i]);
radian += SPLIT;
}
i = 0;
while(1)
{
i %= COUNT;
startTime = GetTickCount();
while((GetTickCount()-startTime) <= busySpan[i])
;
Sleep(idleSpan[i]);
i++;
}
return 0;
}
{
DWORD busySpan[COUNT];
DWORD idleSpan[COUNT];
int half = INTERVAL/2;
double radian = 0.0;
DWORD startTime;
int i;
busySpan[i] = (DWORD)(SLOPE*radian);
idleSpan[i] = (DWORD)(INTERVAL – busySpan[i]);
radian += SPLIT;
}
i = 0;
while(1)
{
i %= COUNT;
startTime = GetTickCount();
while((GetTickCount()-startTime) <= busySpan[i])
;
Sleep(idleSpan[i]);
i++;
}
return 0;
}
{
HANDLE hThread1, hThread2;
DWORD dwThreadId1, dwThreadId2;
hThread2 = CreateThread(NULL, 0, SawThread, 0, CREATE_SUSPENDED, &dwThreadId2);
SetThreadAffinityMask(hThread1, 1);