타이머 기반 동기화 -------------------------------------------------------------------------------------------

커널 오브젝트의 signaled 상태는 매우 중요한 개념이다. 왜냐하면 어떠한 커널 오브젝트도 특정상황이 도래하면 signaled 상태가 되기 때문이다.

타이머 기반 동기화란 그 점을 이용하여 타이머 오브젝트라는 것을 생성하고 그 오브젝트가 일정시간이 지나면 하나의 자동으로 signaled상태가 되는 것을 의미한다.


타이머 기반 동기화의 종류 -------------------------------------------------------------------------------------

타이머 기반동기화는 2가지가 존재한다.

1. 수동 리셋 타이머 : 알람이라고 생각하면 된다. 시간을 맞춰놓으면 그 시간에 특정 동작을 실행하는 타이머 오브젝트를 의미한다.

2. 주기적 타이머 : 수동리셋 타이머에 주기적인 특성이 추가된 오브젝트 특정 시간에 맞춰놓으면 그 시간에 특정 동작이 실행되고 그 이후로 또 특정 시간마다 다시 특정 동작을 실행하는 오브젝트를 의미한다.


타이머 오브젝트 생성함수 --------------------------------------------------------------------------------------

HANDLE CreateWaitableTimerf (

LPSECURITY_ATTRIBUTES lpTimrAttributes, -> 보안속성 지정 핸들을 자식 프로세스에 상속할경우는 그에 맞는 값 아닌 경우는 NULL

BOOL bMaunalReset, -> 타이머 오브젝트를 수동리셋모드로 생성할 것인지, 자동리셋모드로 생성할 것인지 결정하는 함수

LPCTSTR lpTimerName -> 타이머 오브젝트에 이름을 붙여줄 경우 사용하는 전달인지 NULL시 이름없는 오브젝트를 생성한다.

);


타이머 오브젝트 시간설정 함수 ---------------------------------------------------------------------------------

BOOL SetWaitableTimer (

HANDLE hTimer, 

const LARGE_INTEGER* pDueTime, 

LONG lPeriod, 

PTIMERAPCROUTINE pfnCompletionRoutine, 

LPVOID lpArgToCompletionRoutine,

BOOL fResume 

);


HANDLE hTimer, -> 알람을 설정할 타이머 오브젝트의 핸들을 인자로 전달한다. 정해진 시간이 되면 이 핸들의 커널 오브젝트는 signaled상태가 된다.

const LARGE_INTEGER* pDueTime, -> 알람 시간을 지정한다. +라면 절대시간을 의미하고 -값이 전달되면 상대시간을 의미하게 된다. 

ex1) "A시 B분에 알람을 울려주세요" +로 시간설정

ex2) "지금으로부터 A초 후에 알람을 울려주세요" - 값을 넣어주면 10억부늬 1초 단위로 시간을 설정한다.

LONG lPeriod, 타이머가 주기적으로 알람을 울리게 할때 전달하는 인자 주기가 되는 시간을 1/1000초 단위로 전달하면 된다. 0을 전달할 경우 주기적을 알람을 사용하지 않는다는 의미이다.

PTIMERAPCROUTINE pfnCompletionRoutine, 

LPVOID lpArgToCompletionRoutine,

-> 루틴 타이머를 설정하는 함수 추후 설명

BOOL fResume -> 컴퓨터 전원 관리와 관련 있는 매개변수이다. 기본적으로 FALSE 전달을 원칙으로 한다.


타이머 정지 함수 ---------------------------------------------------------------------------------------

BOOL CancelWaitableTimer (

HANDLE hTimer

);

hTimer, 알람을 해제할 타이머 오브젝트의 핸들을 전달한다. 전달된 핸들의 타이머 오브젝트는 알람이 해제된다. Inactive 상태가 된다.

Posted by JJOREG