利用cpu使用率绘制图形

来源:互联网 发布:linux 时间 修改 编辑:程序博客网 时间:2024/06/05 00:18

1.正弦曲线

       /// <summary>       ///利用CPU使用率绘制正弦曲线       /// </summary>       /// <param name="cpuNum">指定CPU,如第3个cpu (IntPtr)0x0004</param>       public static void DrawSine(IntPtr cpuNum)       {           System.Diagnostics.Process p = System.Diagnostics.Process.GetCurrentProcess();           p.ProcessorAffinity = cpuNum;           const int SAMPLING_COUNT = 200;           const double PI = 3.14159;           const int TOTAL_AMPLITUDE = 250;           double[] busySpan = new double[SAMPLING_COUNT];           int amplitude = (TOTAL_AMPLITUDE) / 2;           double radian = 0.0;           double radianIncreament = 2.0 / (double)SAMPLING_COUNT;           for (int i = 0; i < SAMPLING_COUNT; i++)           {               busySpan[i] = (double)(amplitude + Math.Sin(PI * radian) * amplitude);               radian += radianIncreament;           }           int startTick = Environment.TickCount;           for (int j = 0; ; j = (j + 1) % SAMPLING_COUNT)           {               startTick = Environment.TickCount;               while ((Environment.TickCount - startTick) < busySpan[j])               {                   //                }               System.Threading.Thread.Sleep(TOTAL_AMPLITUDE - (int)busySpan[j]);           }        }

2.脉冲信号

       /// <summary>       ///利用CPU使用率绘制脉冲信号       /// </summary>       /// <param name="cpuNum">指定CPU,如第4个cpu (IntPtr)0x0008</param>       public static void DrawPulse(IntPtr cpuNum)       {           System.Diagnostics.Process p = System.Diagnostics.Process.GetCurrentProcess();           p.ProcessorAffinity = cpuNum;           const int SAMPLING_COUNT = 200;           const int TOTAL_AMPLITUDE = 100;           const int HIGHT_AMPLITUDE = 80;           const int LOW_AMPLITUDE = 20;           const int ChangeCount = SAMPLING_COUNT / 2;           double[] busySpan = new double[SAMPLING_COUNT];           for (int i = 0; i < SAMPLING_COUNT; i++)           {               busySpan[i] = i < ChangeCount ? LOW_AMPLITUDE : HIGHT_AMPLITUDE;           }           int startTick = Environment.TickCount;           for (int j = 0; ; j = (j + 1) % SAMPLING_COUNT)           {               startTick = Environment.TickCount;               while ((Environment.TickCount - startTick) < busySpan[j])               {               }               System.Threading.Thread.Sleep(TOTAL_AMPLITUDE - (int)busySpan[j]);           }       }

3.测试效果

用C#编写程序,生成两个EXE,分别执行,效果如下:


0 0
原创粉丝点击