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을 사용해야한다.
'Programming > Windows System Programming' 카테고리의 다른 글
메모리 계층 (0) | 2020.08.07 |
---|---|
쓰레드 풀링(Pooling) (0) | 2020.08.05 |
실행순서 동기화 - 이벤트 기반 동기화 (0) | 2020.08.01 |
커널모드 동기화(Synchronization In kernel Mode) - 이름있는 뮤텍스(Named Mutex) (0) | 2020.07.31 |
커널 모드 동기화(Synchronization In kernel Mode) - 세마포어(Semaphore) (0) | 2020.07.31 |