본문으로 바로가기

Threading.Timer

category Development/C# 2009. 11. 17. 13:38
// Timer클래스 사용하는 스레드 생성
//
// System.Windows.Forms.Timer;
// System.Timers.Timer;
// 멀티 스레드 환경에서 사용하는 서버 타이머 클래스 
//
// System.Threading.Timer
// 스레드 생성시 사용하는 타이머

using System;
using System.Threading;
using System.Windows.Forms;

using Timer = System.Threading.Timer;   // 스레드 생성시 사용하는 타이머
// System.Threading.Timer는 네임스페이스가 아니라 클래스이다. 
// 고로 바로using하고 사용못하고 Timer에 대입하고 써야한다.

public class ThreadTimer
{
   // 타이머 콜백 위임형식   
   TimerCallback tCallback;  

   // public delegate void TimerCallback( object state );
   
   // Timer와 연결된 메서드를 지정하려면 TimerCallback 대리자를 사용하십시오.
   // TimerCallback 대리자는 시작 시간이 경과한 후 자신의 메서드를 호출하고 
   // Dispose 메서드가 호출될 때까지 일정한 기간마다 한 번씩 메서드를 계속 호출합니다.

   Timer myTimer;   // 타이머 객체

   public void TempMethod(object o)
   {
      for(int i=0;i<10;i++)
      {
         Thread.Sleep(100);
         Console.WriteLine("[TID:{0}]number[{1}]",

         Thread.CurrentThread.GetHashCode(),i);
         // 1초마다 현재 실행중인 스레드의 해쉬코드를 10번 출력합니다.
      }
   }

   // 타이머에 메소드를 스케줄링
   public void Start()
   {
        tCallback = new TimerCallback(this.TempMethod);
        myTimer = new Timer(tCallback, this, 3000,1000);
        // TempMethod 메소드를 3초 후, 1초마다 호출한다.
        /*
           public Timer(
            TimerCallback callback,  
            //callback: TimerCallback 대리자. 
            object state,            
            // callback 매개 변수에서 호출한 메서드 또는 null 참조와 관련된 응용 프로그램 관련 정보. 
            int dueTime,             
            // callback에서 메서드를 호출하기 전에 지연될 시간(밀리초)입니다. 
            // 타이머가 시작되지 않도록 하려면 Infinite를 지정합니다. 
            // 타이머를 즉시 시작하려면 0을 지정합니다. 
            int period                
            // callback에서 참조하는 메서드 호출 사이의 시간 간격(밀리초)입니다. 
            // 정기적으로 신호를 보내지 않도록 하려면 Infinite를 지정합니다. 
            );
        */
   }
 
   // 타이머중지 메소드
   public void Stop()
   {
        myTimer.Dispose();
   }
}

public class Program
{
    public static void Main()
    {
        ThreadTimer T = new ThreadTimer();
        
        T.Start();  // 스레드 시작
        MessageBox.Show("타이머 T가 시작되었다\n\n3초후에 타이머가 보임\n\n중지하려면 enter를 입력하시오");
        
        T.Stop();   // 스레드 멈춤
        MessageBox.Show("타이머 T가 멈추었다");

        Console.Read();
    }
}

'Development > C#' 카테고리의 다른 글

C# 데이터 형식  (0) 2009.11.26
ThreadPool을 이용한 순차적 실행  (0) 2009.11.24
const 와 readonly 그리고 enum  (0) 2009.11.10
MS Chart Control  (2) 2009.11.03
zedgraph  (0) 2009.11.02