출처 : http://anyflow.egloos.com/775684

 

커널 객체를 이용한 쓰래드 동기화(3) - 대기가능 타이머
제프리 릭터의 Programming Applications for Microsoft Windows에 담긴 내용입니다.

대기가능 타이머(waitable timer) 커널 객체 : 특정 시간에 혹은 일정 간격으로 그 자신에게 신호를 보낸다. 주로 특정 시간에 어떤 연산을 수행해야할 때에 사용되더라..

대기가능 타이머는 언제나 비신호 상태로 생성되기 때문에, 신호 상태로 만들려면 반드시 SetWaitableTimer()를 호출하여, 타이머가 신호 상태로 변경될 시점을 알려야 하더라..

(SetTimer()로 설정하는) 사용자 타이머와 대기가능 타이머의 비교
사용자 타이머
: 추가적인 UI 인프라를 요구하기 때문에, 리소스 사용량이 많다. 또한 사용자 타이머가 발생시키는 WM_TIMER는 가장 우선순위가 낮은 메시지기 때문에 울림 시간이 정확하지 않은 경우가 많다. 하지만 UI관련 타이머 이벤트를 수행한다면 사용하기가 쉽다. (대기가능 타이머는 커널 객체뿐만 아니라 메시지도 기다려야 한다. -> MsgWaitForMultipleObjects() 이용)
대기가능 타이머 : 커널 객체이기 때문에, 여러 쓰래드에서 공유될 수 있으며, 안전하고 정확하다.
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)을 사용할 경우 이용한다..
안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,