设为首页 加入收藏

TOP

Linux与Windows控制CPU使用率曲线
2014-11-24 07:54:02 来源: 作者: 【 】 浏览:0
Tags:Linux Windows 控制 CPU 使用率 曲线

前几天无聊,按照《编程之美》第一题写了个控制CPU使用率的程序,把自己的代码贴出来,供以后学习……


效果图如下:


Linux CPU使用率曲线


Windows CPU使用率曲线


Windows下截图



其实程序的设计思想很简单,Windows任务管理器中CPU使用率基本上1s刷新一次,而CPU使用率其实就是在1s中CPU忙和闲时间的均值。因此,根据我们想要得到的CPU曲线的特点,我们首先做出忙闲时间的表,CPU根据忙闲时间选择执行或挂起。


代码如下:


#include
#include
#include


#define COUNT 200


const double SPLIT = 0.01;
const double PI = 3.14159265;
const double SLOPE = 150;
const int INTERVAL = 300;


DWORD WINAPI SineThread(LPVOID Sine)
{
DWORD busySpan[COUNT];
DWORD idleSpan[COUNT];
int half = INTERVAL/2;
double radian = 0.0;
DWORD startTime;
int i;


for (i=0; 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 WINAPI SawThread(LPVOID Saw)
{
DWORD busySpan[COUNT];
DWORD idleSpan[COUNT];
int half = INTERVAL/2;
double radian = 0.0;
DWORD startTime;
int i;


for (i=0; 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;
}


int main()
{
HANDLE hThread1, hThread2;
DWORD dwThreadId1, dwThreadId2;


hThread1 = CreateThread(NULL, 0, SineThread, 0, CREATE_SUSPENDED, &dwThreadId1);
hThread2 = CreateThread(NULL, 0, SawThread, 0, CREATE_SUSPENDED, &dwThreadId2);
SetThreadAffinityMask(hThread1, 1);
SetThreadAffinityMask(hThread2, 2);
ResumeThread(hThread1);
ResumeThread(hThread2);
SuspendThread(GetCurrentThread());
return 0;
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇QT过滤重复按键事件 下一篇Java内存溢出相关问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)
·Redis配置中`require (2025-12-26 03:18:58)
·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)