728x90

Timer 기반 동기화 오브젝트는 정해진 시간이 지나면 자동으로 Signaled 상태가 되는 특성을 지닌다.

 

타이버 기반으로 동기화 하는 것은 임계영역 문제 해결을 위한 동기화가 아니라 쓰레드의 실행시간 및 실행 주기를 결정하겠다는 의미이다.

 

수동 리셋 타이머 : 가장 일반적인 타이머로, 알람시계와 같은 특성이다.

주기적 타이머 : 수동리셋 타이머에 주기적인 특성이 가해진 형태이다. 6시에 알람을 맞춰놓으면 6시에도 알람이 울리고 30분마다 한번씩 주기적으로 알람이 울리도록 설정하는 기능이 있다.

 

수동 리셋 타이머(Manual-Reset Timer)

타이머 오브젝트는 정해진 시간이 지나야 Signaled 상태가 되는 커널 오브젝트이다.

 

타이머 오브젝트 생성 함수

HANDLE CreateWaitableTimer(

    LPSECURITY_ATTRIBUTES IpTimerAttributes,

    BOOL bManualReset,

    LPCTSTR lpTimerName

);

1.lpTimerAttributes : 보안 속성 지정, 핸들을 자식 프로세스에게 상속하고자 할 경우 NULL이 아닌 다른 값

2.bManualReset : 타이머 오브젝트를 수동 리셋(Manual-Reset)모드로 생성 할 것인지, 자동 리셋(Auto-Reset)모드로 생성할 것인지 결정

3.lpTimerName : 타이머 오브젝트에 이름을 붙여줄 경우에 사용되는 전달 인자 NULL 전달 시 이름없는 타이머 오브젝트 생성

 

타이머 오브젝트는 무조건 Non-Signaled 상태로 생성된다.

시간이 지나서 Signaled 상태가 되어야 한다.

 

타이머 시간 설정 함수

BOOL SetWaitableTimer

   HANDLE hTimer,

   const LARGE_INTEGER * pDueTime,

   LONG lPeriod,

   PTIMERAPCROUTINE pfnCompletionRoutine,

   LPVOID lpArgToCompletionRoutine,

   BOOL fResume

);

1.hTimer : 알람을 설정할 타이머 오브젝트 핸들

2.pDueTime : 알람이 울리는 시간을 지정하는 매개변수, +값이 전달되면 절대 시간, -값이 전달되면 상대시간

"A시 B분 알람"-> +값

"지금으로부터 A초후 알람" ->? -값

1000만 분의 1초(100 Nanoseconds)단위로 시간 설정

3.lPeriod : 타이머가 주기적으로 알람을 울리게 할 때 사용하는 전달인자. 1/1000초(Milliseconds)단위로 전달한다. 0을 전달할 경우 주기적인 알람을 사용하지 않겠다는 의미이다.

4,5 pfnCompletionRoutine 과 lpArgToCompletionRoutine은 타이머를 생성하는 용도의 함수이다.

6.fResume은 전원관리와 관련이 있는 매개변수인데, 기본적으로 FALSE 전달을 원칙으로 한다.

 

LARGE_INTEGER는 64비트 정수를 표현하지 못하는 시스템에서 64비트 정수를 표현하기 위해 선언된 자료형이다.

 

주기적 타이머(Periodic-Timer)

SetWaitableTimer(

 hTimer, &liDueTime, 5000, NULL, NULL, FALSE);

위와 같이 3번째 인자에 5000을 넣으면 5초간격으로 타이머가 Signaled 상태가 된다.

 

CancleWaitableTimer 함수

가동중에 있는 타이머를 중지시키는 기능의 함수

타이머를 소멸시키거나 할당된 자원을 반환하는 종류가 아니다.

 

BOOL CancelWaitableTimer(

   HANDLE hTimer

);

1.hTimer : 알람을 해제할 타이머 오브젝트의 핸들을 전달한다.

전달된 타이머는 알람이 해제된다.

 

타이머의 자원을 반환하기 위해서는 CloseHandle을 사용해야한다.

 

 

 

 

 

 

728x90

+ Recent posts