// 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();
}
}