程序控制CPU曲线
通过任务管理器我们可以看到现在我们的电脑中CPU以及内存的使用率,CPU的使用是由现在所运行的程序占用。但是我们有没有想过如何自己写一个程序去控制我们的CPU占用率呢?也许这是一个比较困难的事情,因为我们首先想到的是如何从底层去控制CPU。难道它真的有那么困难吗?也许不是,下面让我们去分析如何使我们的CPU显示直线和正弦曲线。
首先,我们需要知道什么是CPU使用率。
CPU使用率:CPU忙的时间与刷新周期时间的比率。
一:实现CPU显示一条直线
任务管理器每一秒钟刷新一次,要在这一秒钟内,使CPU的平均使用时间和空闲时间各占50%. 而不是让CPU使用1秒钟,空闲一秒钟。这样的话任务管理器出现的CPU的使用图像会是忽高忽低。windows的调度时间片为10ms, 所以在编写程序的时候就可以让cpu不停的工作10ms, 然后空闲10ms, 空闲操作通过sleep(10)来实现。这样最后任务管理器在刷新CPU占用率的时候就会得到这个一秒钟内的CPU的平均使用率。显示出50%的水平。
通过空循环,来让cpu保持繁忙的工作状态,通过sleep使cpu空闲。
机器指令最接近的是汇编语言。
空的for 循环,换成汇编语言是大概5句,现在的CPU可以在一个时钟周期执行两个机器指令,相当于执行两个汇编语句。
考虑到我的电脑的主频是1.0G,所以应该是每秒可以执行 1000000000*2/5=400000000 条空循环。 然而不能让机器执行一秒的空循环,应该分时间片的执行。一个时间片10ms, 所以执行空循环应该为4000000次。
代码如下:
package cpuWaveForm; /** * 控制CPU波形为直线的线程 * @author Andrew * */ public class LineFormThread extends Thread{ int i=0; public void run(){ while(true){ for(i=0; i<400000000; i++) ; try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } }
上面的程序在我的电脑上运行后通过 资源管理器 查看
二:实现CPU显示一条正弦曲线
若实现CPU显示一条正弦曲线,我们可以写一个程序让CPU工作一段时间,Sleep一段时间以便让CPU显示曲线。
代码如下:
package cpuWaveForm; /** * 控制波形线程 * @author Andrew * */ public class WaveFormThread extends Thread{ final double SPLIT = 0.01;//角度分割 final int COUNT = (int)(2/SPLIT); final double PI = Math.PI; final int INTERVAL = 200; long[] busySpan = new long[COUNT]; long[] idleSpan = new long[COUNT]; int half = INTERVAL/2; double radian = 0.0; public void run(){ for(int i=0; i<COUNT; i++){ busySpan[i] = (long)(half+(Math.sin(PI*radian)*half)); idleSpan[i] = INTERVAL - busySpan[i]; radian+=SPLIT; } long startTime = 0; int j=0; while(true){ j = j%COUNT; startTime = System.currentTimeMillis(); while(System.currentTimeMillis()-startTime<busySpan[j]); try { Thread.sleep(idleSpan[j]); j++; } catch (InterruptedException e) { e.printStackTrace(); } } } }
以上代码在我的电脑上的运行结果为:
相关推荐
3. 程序设计:涉及到PLC中编写程序的技术,用于控制设备的运行和实现特定功能。 4. 插补:在数控机床和机器人等设备中,插补是一种通过控制轴的运动来绘制曲线或曲面的技术。 5. 子程序:在编程中,子程序是一段独立...
实例020 以树形显示的程序界面 20 实例021 动态按钮的窗体界面 21 1.6 特殊形状的窗体 23 实例022 非矩形窗体 23 实例023 建立字体形状窗体 24 实例024 控件随窗体自动调整 25 实例025 带分隔栏的窗体 25 ...
实例020 以树形显示的程序界面 20 实例021 动态按钮的窗体界面 21 1.6 特殊形状的窗体 23 实例022 非矩形窗体 23 实例023 建立字体形状窗体 24 实例024 控件随窗体自动调整 25 实例025 带分隔栏的窗体 25 ...
实例020 以树形显示的程序界面 20 实例021 动态按钮的窗体界面 21 1.6 特殊形状的窗体 23 实例022 非矩形窗体 23 实例023 建立字体形状窗体 24 实例024 控件随窗体自动调整 25 实例025 带分隔栏的窗体 25 ...
实例020 以树形显示的程序界面 20 实例021 动态按钮的窗体界面 21 1.6 特殊形状的窗体 23 实例022 非矩形窗体 23 实例023 建立字体形状窗体 24 实例024 控件随窗体自动调整 25 实例025 带分隔栏的窗体 25 ...
实例018 以树型显示的程序界面 23 实例019 以XPManifest组件显示界面 24 实例020 动态按钮的窗体界面 25 1.6 特殊形状的窗体 26 实例021 非矩形窗体 26 实例022 建立字体形状窗体 28 1.7 多媒体光盘 ...
即,新版支持库可被旧版易语言或易程序使用,旧版支持库也可被新版易语言或易程序使用(只是不支持静态编译)。 静态编译后的易语言EXE/DLL之间不能再共享譬如窗口、窗口组件等类似资源,对于已经静态连接到一个...
1、打开控制面板的网络设置项,将 TCP/IP 协议添加到网络组件中(如下图),再选择与网卡绑定的 TCP/IP 协议。 2、在 TCP/IP 属性页中设置正确的 IP 地址,注意不要使 IP 地址重复,设置完成后重新启动计算机。 注:...
105 实例082 ImageAnimator类显示动画图片 108 实例083 QQ头像列表 110 2.10 控件技术 112 实例084 程序运行时智能增减控件 112 实例085 控制焦点移动 114 实例086 动态创建控件 115...
子例程级的文档集描述了各个程序单元的功能,这些文档是通过源代码注释给出的。 GEMINI使用广义的正交曲线坐标,并已通过偶极子和笛卡尔坐标进行了测试。 如果您在使用GEMINI时遇到困难,请打开。 通常,Git ...