본문 바로가기

C#

[C#] 서로 다른 3가지 Timer

◈ 정의

Timer는 C++부터 쭈욱 많이 사용되는 스레드 종류 중에 하나

C#에서는 Timer 클래스가 3개가 존재합니다. 물론 각각의 Timer는 속성이 다릅니다.



◈ 설명

먼저 Timer의 특징은 Thread와 다른게 선언할 때 반복의 간격을 정하게 되겠습니다. 

아무래도 Thread.Sleep는 인터럽트적으로 강제로 프로세스를 멈추게 하는 성향이 있기 때문에 시스템에 무리가 가게 되어있습니다. 그러나 Timer는 Callback 개념으로 지정된 시간 후에 Callback을 하는 개념이니 아무래도 부하가 적게 걸립니다.

그리고 Timer는 세개로 나누어져 있습니다. Timer는 ThreadPool과 비슷한 개념으로 부모 메소드가 차단되면 Timer도 자동적으로 Callback의 주체가 없어지니 소멸되게 되어 있습니다. 그러나 ThreadPool과는 가장 큰 차이점은 메시지 Callback 개념이라는 것입니다. 

즉, Windows.forms에 있는 것은 Window 메시지 흐름의 Callback을 하는것이고 시스템 사용자 Time 메시지 흐름의 Callback 메시지이고 Thread는 Thread 콜백입니다.


Timer.Timer 와 Threading.Timer 차이는 서버시간을 쓰느냐 프로그램 시간을 사용하느냐의 차이입니다. 

이거는 제가 특별히 프로그램을 나타내기 힘들기에 설명으로 표현하겠습니다. Threading.Timer는 프로그램의 리소스의 영향이 갑니다. 즉 프로그램 전체가 인터럽트에 걸리거나 느려지게 되면 이 스레드는 같이 멈추거나 느려지게 되나 Timer.Timer는 시스템 시간에 영향이 가기 때문에 즉 프로그램이 인터럽트에 걸리거나 느려져도 Timer 스레드는 그 시간에 맞추어 실행한다는 차이점입니다.


특별히 시스템을 일부러 인터럽트에 걸리게 하거나 느려지게 하는 프로그램을 만들때(검사 프로그램 등등.) 이 두 스레드의 차이를 두어 작성을 하겠으나 거의 대부분의 프로그램은 그런 경우가 없기에 보통은 Thread.Threading의 스레드를 많이 이용하게 됩니다.




◈ 종류

1) System.Windows.Forms.Timer

-. 사용자가 정의한 간격마다 이벤트를 발생시키는 타이머를 구현합니다. 이 타이머는 Windows Forms 응용 프로그램에서 사용할 수 있도록 최적화되었으며 창에서 사용해야 합니다.


2) System.Threading.Timer

-. 지정된 간격으로 메서드를 실행하는 메커니즘을 제공합니다. 


3) System.Timers.Timer

-. 응용 프로그램에 되풀이 이벤트를 생성합니다.




▣ 세 가지 Timer의 차이점을 크게 두 가지 측면에서 살펴 볼까 합니다.

-. 사용법상의 차이점

-. 수행되는 Thread 환경의 차이점



◈ 예제

1) System.Windows.Forms.Timer 사용법

-. Systme.Windows.Forms.Timer timer = new Systme.Windows.Forms.Timer(); // 객체 생성

-. 반복 주기 및 작업 설정

: timer.Interval = 1000; // 타임 주기 설정

: timer.Tick += new EventHandler(timer_Tick); // 주기마다 실행되는 이벤트 등록


: void tmrWindowsForms Timer_Tick(Object sender, System.EventArgs e)

{

수행해야할 작업

}




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

[C#] MemberwiseClone() 함수  (0) 2018.07.16
[C#] enum의 Flag 연산  (0) 2018.07.16
[C#] Delegate  (0) 2018.07.16
[C#] Boxing / UnBoxing / as  (0) 2018.07.11
[C#] 마샬링이란(marshalling)  (0) 2018.07.10