문제가 있습니다. 사실 저는 프레임 워크의 Timer와 Programe에서 다른 타이머를 사용해야합니다 .Net은 내가 원하는 것을하지 않습니다. 그래서 나는 내 자신의 타이머를 만들기로 결정했지만 타이머는 너무 많은 CPU를 사용합니다. 내 코드 :과도한 CPU 사용량
using System;
using System.Threading;
namespace XXXXXXX.Common.Types
{
public delegate void TimerFinishedEventHandler(object sender, EventArgs e);
class Timer
{
#region Attributes
private long m_InitialTickCount;
private long m_Interval;
private Thread m_Thread;
private bool m_Enabled;
#endregion
#region Events
public event TimerFinishedEventHandler Finished;
#endregion
#region Constructors
public Timer(long interval, TimerFinishedEventHandler e)
{
Finished += e;
m_Interval = interval;
Start(m_Interval);
}
#endregion
#region Public methods
/// <summary>
/// Start the timer thread.
/// </summary>
public void Start(long interval)
{
m_Interval = interval;
m_Enabled = true;
m_InitialTickCount = Environment.TickCount;
if (m_Thread == null)
{
m_Thread = new Thread(Check);
m_Thread.Start();
}
}
/// <summary>
/// Stop the Timer.
/// </summary>
public void Stop()
{
m_Enabled = false;
}
/// <summary>
/// Restart the Timer.
/// </summary>
public void Restart()
{
m_InitialTickCount = Environment.TickCount;
}
#endregion
#region Private methods
/// <summary>
/// Check if the timer is finished or not.
/// </summary>
private void Check()
{
while (true)
{
if (!m_Enabled)
return;
if (Environment.TickCount > m_InitialTickCount + m_Interval)
{
OnFinished(EventArgs.Empty);
return;
}
}
}
/// <summary>
/// Called when the Timer is Finished.
/// </summary>
/// <param name="e">Event</param>
protected virtual void OnFinished(EventArgs e)
{
if (Finished != null)
Finished(this, e);
}
#endregion
}
}
해결책이있는 사람이 있습니까? 내 프로그램을 시작하면 2 또는 3 개의 타이머가 만들어지고 다른 스레드가 실행되고 100 % CPU를 사용하게됩니다.
코드가 누락 되었습니까? –
자신 만의 타이머를 작성해야한다고 결정하기 전에 무엇을하고 싶은지 알려주시겠습니까? 제공된 타이머가 원하는대로 작동 할 가능성이 큽니다. –
@AMADANONInc. 죄송합니다. 편집했습니다. – Veriditas