•
대기가능 타이머(waitable timer) 커널 객체: 특정 시간에 혹은 일정 간격으로 그 자신에게 신호를 보낸다. 주로 특정 시간에 어떤 연산을 수행해야할 때에 사용되더라..
◦
대기가능 타이머는 언제나 비신호 상태로 생성되기 때문에, 신호 상태로 만들려면 반드시 SetWaitableTimer()를 호출하여, 타이머가 신호 상태로 변경될 시점을 알려야 하더라..
•
(SetTimer()로 설정하는) 사용자 타이머와 대기가능 타이머의 비교
◦
사용자 타이머: 추가적인 UI 인프라를 요구하기 때문에, 리소스 사용량이 많다. 또한 사용자 타이머가 발생시키는 WM_TIMER는 가장 우선순위가 낮은 메시지기 때문에 울림 시간이 정확하지 않은 경우가 많다. 하지만 UI관련 타이머 이벤트를 수행한다면 사용하기가 쉽다. (대기가능 타이머는 커널 객체뿐만 아니라 메시지도 기다려야 한다. -> MsgWaitForMultipleObjects() 이용)
◦
대기가능 타이머: 커널 객체이기 때문에, 여러 쓰래드에서 공유될 수 있으며, 안전하고 정확하다.이벤트(Event) 커널 객체: 커널 객체 중 가장 원시적인 객체. 사용 카운트(usage count), 자동 리셋(auto reset)-수동 리셋(manual reset) 상태 여부를 구분하는 불 값, 신호-비신호 상태 여부를 구분하는 불 값으로 구성되더라..//이벤트 생성
HANDLE CreateWaitableTimer (
PSECURITY_ATTRIBUTES psa,
BOOL fManualReset,
PCTSTR pszName );
fManualReset : 수동 리셋(TRUE)인지, 자동 리셋(FALSE)인지의 여부
이벤트에서의 수동 리셋, 자동 리셋 기능과 동일
HANDLE OpenWaitableTimer (
DWORD dwDisiredAccess,
BOOL bInheritHandle,
PCTSTR pszName );
BOOL SetWaitableTimer (
HANDLE hTimer,
const LARGE_INTEGER *pDueTime,
LONG lPeriod,
PTIMERAPCROUTINE pfnCompletionRoutine,
PVOID pvArgToCompletionRoutine,
BOOL fResume );
// pDueTime : 타이머가 처음으로 울릴 시점
// lPeriod : 타이머가 울릴 시간 간격
// fResume : 잠시 대기(suspend)에서 재개(resume)을 지원하는 컴퓨터에서 쓰임. 보통은 FALSE로 많이 놓는다.
// pfnCompletionRoutine, pvArgToCompletionRoutine: 타이머가 신호 상태로 왔을 때에 실행될 프로시저의 함수 포인터와 매개변수. 타이머와 함께 APC(Asynchronous Procedure Call)을 사용할 경우 이용한다..
C++
복사