본문 바로가기
[2]SW Development Note/[2-1.2]C#

시간은 없고 타이머의 종류는 많다

by 오늘도 빛나는 너에게 2021. 5. 14.
728x90

시간은 없고 타이머의 종류는 많다

 

FCL은 다양한 형태의 타이머들을 제공하고 있지만 불행히도 대부분의 개발자들이 이 타이머들의

 

특성을 정확히 알지 못하는 것 같아 이에 대해서 먼저 설명을 해볼까 한다.

 

System.Threading의 Timer 클래스: 

 

더보기

이 타이머는 앞에 절에서 살펴본 타이머다. 스레드풀 내의 스레드를 이용하여

 

 백그라운드 태스크를 주기적으로 수행하려는 경우에 가장 적절한 타이머다.

 

System.Windows . Forms의 Timer 클래스:

더보기

이 클래스로 타이머 인스턴스를 생성하면 생성자를 호출한 스레드와 연관된

타이머를 생성할 것을 운영체제에 요청한다.(Win32의SetTimer 함수 참고).

타이머가 시작되면 윈도우 운영체제는 타이머 메시지 (WMTIMER)를 해당

스레드의 메시지 큐에 삽입한다. 이렇게 삽입된 메시지를 가지고 와서 적절한

콜백 메서드로 전달하려면 반드시 메시지 펌프를 수행해야 한다.

주목할 점은 모든 작업늘이 단일의 스레드에 의해서 수행된다는 점이다.

타이머를 설정한 스레드가 곧 콜백 메서드를 수행해주는 스레드 임을 보장한 다는 것이며,

이는 타이머 콜백 메서드를 여러 스레드가 동시에 수행할 수 없음을 의미하는 것이기도 하다.

 

.System. Windows . Threading의 DispatcherTimer 클래스: 

 

더보기

이 클래스는 실버라이트와WPF에서 사용할 수 있는 타이머로 System. Windows .

 

 Forms의 Timer 클래스와 동일하다.

 

 

 

Windows.UI.Xam1의 DispatcherTimer 클래스

 

더보기

이 클래스는 윈도우 스토어 앱에서 사용할 수 있는 타이머로 System.Windows . 

 

Forms의 Timer 클래스와 동일하다.

 

System.Timers의 Timer 클래스:

 

더보기

이 타이머는 기본적으로 System. Threading의 Timer 클래스를 감싼 클래스이며,

 

타이머로 설정한 시간이 되었을 때 스레드 풀로 이벤트를 큐잉한다.

 

System.Timers.Timer 클래스는 System.ComponentMode1의 Component 클래스

 

를 상속하고 있기 때문에 Visual Studio의 디자인 화면에 타이머 객체를 끌어다 놓을 수 있고,

 

속성과 이벤트를 이용하여 Visual Studio 디자인 화면에서 손쉽게 사용할 수 있다. 이 클래스

 

는 마이크로소프트가 스레딩과 타이머 관련 요소를 정리하기 이전에 FCL에 추가된 클래스

 

인데, 모든 개발자가 이 클래스 대신 System.Threading . Timer 클래스를 사용하도록 없

 

어져야만 했는데 그러지 않았다. 필자는 System.Timers.Timer를 사용하지 않는다. 디자

 

인 화면에 타이머를 끌어다 놓아야 하는 상황이 아니라면 이 클래스를 쓰지 않기 바란다.

728x90

'[2]SW Development Note > [2-1.2]C#' 카테고리의 다른 글

C# 값형 과 참조형  (0) 2021.09.16
NET Framework의 해시함수  (0) 2021.08.26
단위 변환 Class (C#)  (0) 2021.05.11
스레드의 파라미터 전달  (0) 2021.05.08
SqlLite C.R.U.D Class  (0) 2021.05.08

댓글