using System;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Windows.Forms.DataVisualization.Charting;
using System.Threading;
namespace CPUUsage
{
public partial class Form1 : Form
{
private Thread addDataRunner;
public delegate void AddDataDelegate();
public AddDataDelegate addDataDel;
public double state;
PerformanceCounter p;
public Form1()
{
InitializeComponent();
}
private void btnShow_Click(object sender, EventArgs e)
{
p = new PerformanceCounter();
p.CategoryName = "Processor";
p.CounterName = "% Processor Time";
p.InstanceName = "_Total";
addDataRunner.Start();
}
private void Form1_Load(object sender, EventArgs e)
{
//Thread
ThreadStart addDataThreadStart = new ThreadStart(AddDataThreadLoop);
addDataRunner = new Thread(addDataThreadStart);
addDataDel += new AddDataDelegate(AddData);
chart1.ChartAreas[0].AxisX.Minimum = 0;
chart1.ChartAreas[0].AxisX.Maximum = 60;
chart1.ChartAreas[0].AxisY.Minimum = 0;
chart1.ChartAreas[0].AxisY.Maximum = 100;
chart1.Series.Clear();
Series newSeries = new Series("CPU Usage");
newSeries.ChartType = SeriesChartType.Spline;
newSeries.BorderWidth = 2;
newSeries.Color = Color.Orange;
newSeries.XValueType = ChartValueType.Double;
chart1.Series.Add(newSeries);
}
private void AddDataThreadLoop()
{
while (true)
{
chart1.Invoke(addDataDel);
Thread.Sleep(1000);
}
}
public void AddData()
{
foreach (Series ptSeries in chart1.Series)
{
AddNewPoint(ptSeries);
}
}
public void AddNewPoint(Series ptSeries)
{
float usage = p.NextValue();
ptSeries.Points.AddXY(state, usage);
lbUsage.Text = ((int)usage).ToString()+"%";
lbPoint.Text = string.Format("{0}{1}", state.ToString()," sec");
if (state % 60 == 0)
{
chart1.ChartAreas[0].AxisX.Minimum = state;
chart1.ChartAreas[0].AxisX.Maximum = state+60;
}
state++;
chart1.Invalidate();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
addDataRunner.Abort();
}
}
}
C#으로 CPU사용량 측정 프로그램 소스 코드입니다.
chart는 MS chart를 이용하였습니다.(MS chart를 이용하시려면 .net Framework 3.5 sp1, mschart관련 컴포넌트가 필요합니다..)

