VC中对CPU占用率的控制
来源:互联网 发布:mac docker lnmp 编辑:程序博客网 时间:2024/06/10 14:29
1下面代码生成了一条CPU占用率为50%的直
第一种方法for(;;){for(int i=0;i<6600000;i++)//这个数字根据个PC的主频计算,结合机器周期与时钟周期的知识计算并做适当调节得到;Sleep(100);//这里的数值不易过小,若远小于Windows的调度时间片,会造成线程频繁的唤醒和挂起,无形中增加了内核时间 //的不确定性}
这里注意的是:由于现在的PC多为多核,为方便控制占用率可通过调节进程的相关性设置具体的CPU(在任务管理器中右击运行的进程,选择“设置相关性”即可),也可,通过SetProcessAffinityMask函数进行设置例如通过在进程中增加SetProcessAffinityMask(GetCurrentProcess(),2)语句即把当前进程所用的CPU设置为第二个(CPU 1).至于CPU曲线的变化可同过资源监视器来获得。该程序的CPU占有率曲线如下图:
第二种方法:
int busytime=100;int idletime=busytime;long starttime=0;while(true){starttime=GetTickCount();//std::cout<<starttime<<std::endl;//调试用while((GetTickCount()-starttime)<=busytime);Sleep(idletime);}
说明:这种方法引入了GetTickCount()(具体用法参见MSDN)来返回自开机后所运行的时间,而不必手动计算循环数;并且比较精准,效果如下(可以看到效果比方法一要好):
2 sin曲线的生成
const double SPLIT=0.01;const int COUNT=200;const double PI=3.1415926;const int INTERVAL=300;float busyspan[COUNT];float idlespan[COUNT];int half =INTERVAL/2;double radian=0.0;for(int i=0;i<COUNT;i++){busyspan[i]=half+half*sin(PI*radian);idlespan[i]=INTERVAL-busyspan[i];radian+=SPLIT;}DWORD starttime=0;int j=0;while(true){j=j%COUNT;starttime=GetTickCount();while((GetTickCount()-starttime)<=busyspan[j]);Sleep(idlespan[j]);j++;}效果图如下:
通过学习,对MSDN的使用进一步得到了熟悉,对线程与进程的知识又增进了了解。
- VC中对CPU占用率的控制
- BES - 控制进程的CPU占用率
- 如何控制一个进程CPU的占用率
- java控制多核cpu的占用率
- 编写程序 控制cpu占用率
- CPU 占用率的获得
- 编写程序 控制cpu占用率-4 绘制CPU使用率的正弦曲线
- 写程序+控制cpu占用率-4+绘制CPU使用率的正弦曲线2+C#+实现
- Linux中如何限制一个进程的CPU占用率?
- 控制CPU占用率曲线为正弦曲线
- 使用Java代码控制CPU占用率
- 使用Java代码控制CPU占用率
- 编写程序 控制cpu占用率2
- 编写程序 控制cpu占用率-3
- 获得进程的CPU占用率
- 舞动的CPU占用率曲线
- 降低 CPU 占用率的方法
- 写程序 控制cpu占用率-4 绘制CPU使用率的正弦曲线2 通过C#指定线程运行的 CPU
- java多线程之死锁
- 【学习】C语言中的关键字
- 面试100题系列之2字符串删除多余空格
- hdu 2617 Happy 2009
- 全国软件---------欧拉与鸡蛋
- VC中对CPU占用率的控制
- Win32系统编程之四书五经(作者:孟岩)
- C++静态成员函数小结(转)
- Scheme基本概念之Whitespace
- Java执行时内存分析
- STM32固件库详解
- jQuery全选、取消全选、反选
- java国际化
- 大数的取余运算