今天看到一本讲算法的好书,<<叫编程之美>>。看了一节,里面讲的是控制cpu
的占有率,
cpu的占有率是由进程的忙和空闲来决定的,即
rate=(busy_time)/(busy_time+idle_time);
怎么来控制她呢? busy可以用循环(这个循环用空循环,以便好控制),idle可以用sleep
比如先让任务管理器的cpu使用率始终保持在50%左右,那么在一个主循环中,
让空循环和sleep运行同样的一小段时间。sleep的时间好搞,空循环的怎么办呢?可以用cpu的主频估算出运行一个空循环所需要的时间,然后去设定空循环所要运行的次数,
比如:
while(true)
{
//for 循环运行x次,使它的时间和sleep的时间相等
for(int i=0;i<x;i++);
sleep(time);
}
这种要估算cpu的运行速度,不太方便,准确性也不高。
《编程之美》里面介绍一种好的方法。在运行的时候设定空循环的运行时间
int start_time=click();
while((click()-start_time)<runtime);
这样就能使空循环运行runtime 毫秒
有了这个只要设定一下循环和sleep的比例就可以随意控制任务管理器中的cpu的使用率了,
下面用任务管理器画个弦函数图像
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;
int main()
{
const float PI=3.1416;
int count=180; //时间数组的个数
int idle[count];
int busy[count];
float delta=2*PI/count;
float alpha=0;
/*
给循环和sleep各生成一列时间数组
busy按照正弦规律变化,busy和对应的sleep的和不变
*/
for(int i=0;i<count;i++)
{
busy[i]=count*(sin(alpha)+1)/2;
idle[i]=count-busy[i];
alpha=alpha+delta;
cout<<busy[i]<<"---"<<idle[i]<<endl;
}
int j=0;
int st_time;
while(true)
{
j=j%count;
st_time=clock(); //起始时间
while((clock()-st_time)<busy[j]);
Sleep(idle[j]);
j++;
}
system("PAUSE");
return 0;
}
不过图片还是没有那么完美。有时突然蹦起来,可能是机器的原因,这是在pentium二 400M 主频,130M内存下测试的。书上还说在双核上的效果是一样的,不过这个机器就无能为力了!
- 大小: 15.5 KB
分享到:
相关推荐
Windows下用C语言获取进程CPU使用率,内存使用,IO情况。 可以准确的获取当前进程的CPU使用率。
平台:linux。 语言:c。 功能:查看当前系统cpu使用率(可多核),1秒刷新一次。
Windows下用C语言获取进程CPU使用率,内存使用,IO情况。 可以准确的获取当前进程的CPU使用率。
使用VB C语言 获取电脑CPU使用率,小巧实用,小内存使用,堪比鲁大师(说笑而已),完全代码公开,全解注释,直接F5运行,完全自己手动编写,适合有兴趣的猿员人们研究,桌面显示实时监控!!CPU使用率源代码,CPU使用...
linux c程序获取cpu使用率及内存使用情况
写一个小程序在后台记录每个进程的CPU使用情况,揪出锁屏后占用CPU的进程,于是自己写了一个C++类CPUusage,方便地监视不同进程的CPU占用情况。本人编程还只是个新手,如有问题请多多指教
Linux下C语言代码,采集数据其中用到了定时器30S进行一次信息采集,最开始获取cpu对于total使用率,而不是用户和系统相对的使用率
C/C++实现linux和Windows查看系统、进程、服务的内存和CPU使用情况的源代码,生成的是静态链接库,Windows和Linux下经测试都可用,查看系统、指定名称的服务、指定名称的进程占用CPU和内存,查看方式不是通过程序中...
在下linux 监控cup的使用率,实时频率(跟cpu频率不同) 内存使用率 网速监控 C语言实现
Sigar有C,C#,Java和Perl API,java版的API为sigar.jar sigar.jar的底层是用C语言编写的,它通过本地方法来调用操作系统API来获取系统相关数据。Windows操作系统下Sigar.jar 依赖sigar-amd64-winnt.dll或sigar-x86-...
dtrace 分析器是一个轻量级的 PHP 扩展提供脚本的调用...CPU 使用率 函数调用的文件和行号 输出为谷歌的跟踪事件格式 字幕功能 分组函数 函数别名(对匿名函数有用) forp 是非侵入性的,它提供了 PHP 注释来完成工作.
这样效率真的提升不少,至少CPU使用率稳稳的在20以下,不会飙到100了。用C语言写这个还是挺费时间的,因为什么功能函数都要自己写,不像C++有STL库可以用,MFC写就更简单了,接下来我还会更新MFC版本的多人聊天程序...
代码如下:#include <stdio>#include <unistd>int main(){ char caStdOutLine[1024]; // ps 命令的标准输出中的一行信息 char* pcTmp = NULL; // 指向以空格拆分后的字符串 char caSelfPID[10];...
MSP430 中大部分芯片都包含有硬件的...行通信的工作模式,通过 UTCTL0设置产生波特率所使用的时钟。值得注意的是,设置串行 通信模块时, 应该使寄存器 UCTL0 中的 SWRST 位置位, 以便使串行通信模块处于复位状态,
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
色彩3 特征 X11窗口服务器的轻量级栏 (几乎)完全符合X11 易于配置,并准备好进行AUR。md 会费 欢迎捐款! 如果您希望看到实现的功能,那就去做吧!... 使用PulseAudio库而不是alsa 清理xlib调用 用于添加模块的abi
发光二极的控制:单片机 I/O 输出 将一发光二极管 LED 的正极(阳极)接 P1.1,LED 的负极(阴极)接地 GND。只要 P1.1 输出高电平 VCC,LED 就正向导通(导通时 LED 上的压降大于 1V),有电流流过 LED,至发 LED ...
在feodra下编写任务管理器。。。 能够实现关机,重启,cpu使用率动态显示 等等
multisim点击"next"选择工程类型和程序语言,默认类型为standard,默认语言为C语言,都使用默认就可以了,除非你要用汇编,输入工程名称,添加资源文件或创建一个空工程,finsh完成。双击打开元件可以编辑时钟平率,...
1〕能以图形化实时显示系统的CPU、内存、磁盘与网络资源等的资源使用情况,实现如下监控功能: CPU:多处理器系统中每个处理器的CPU使用率、CPU运行的队列长度、系统呼叫次数以及中断及环境交换机的操作频率;...