LISTORY
[윈도우즈 시스템 프로그래밍] 타이머 기반 동기화 본문
뇌를 자극하는 윈도우즈 시스템 프로그래밍 책 관련 유투브 강의 정리이다.
이번 시간에 정리할 내용은 타이머 기반 동기화 부분이다.
YouTube 주소 : 타이머 기반 동기화
타이머 기반 동기화
이번 강의를 통해 타이머와 이벤트가 어떠한 의미를 가지는지 설명하겠다.
⊙ 수동, 자동 리셋 타이머
타이머도 커널 오브젝트이다.
타이머 오브젝트가 알람을 울린다는 것은 타이머 오브젝트가 Signaled 상태가 되었다는 것이다.
즉, 타이머는 일정 시간이 지난 뒤에 Signaled 상태가 되게 하는 것이다.
수동 리셋 타이머는 시간을 정해주면 그냥 Signaled 상태가 되는 것이다.
이벤트 : 내가 지정해준 때에 Signaled 상태가 된다.
타이머 : 내가 지정해준 시간 뒤에 Signaled 상태가 된다.
자동 리셋 타이머는 수동 리셋 타이머 + 알파이다.
예를 들어 10초뒤에 알람을 울리고 싶으면, 울리게 하고 5초에 한번씩 반복하여 다시 울리도록 설정할 수 있다.
타이머는 다음 함수를 통해 만들 수 있다.
HANDLE CreateWaitableTimer(
LPSECURITY_ATTRIBUTES lpTimerAttributes,
BOOL bManualReset,
LPCTSTR lpTimerName
);
시간은 다음 함수를 통해 정할 수 있다.
BOOL SetWaitableTimer(
HANDLE hTimer,
const LARGE_INTEGER* pDueTime,
LONG lPeriod,
PTIMERAPCROUTIME ptpCompletionRoutine,
LPVOID lpArgToConnection,
BOOL fResume
);
이 때, 두가지 시간을 정해줘야 한다.
1. 몇초 뒤에 울릴 것인가(두번째 인자)
2. 몇초마다 반복하며 울릴 것인가(세번째 인자)
중요한 것은 5초에 한번 signaled 상태가 된다는 것은 자동적으로 non-signaled 상태로 바뀐다는 것을 뜻한다.
즉, CreateWaitableTimer() 함수로 타이머 생성 시, 자동 리셋모드로 만들어야 한다.
'IT > 윈도우 프로그래밍' 카테고리의 다른 글
[윈도우즈 시스템 프로그래밍] 쓰레드 풀의 구현 (0) | 2018.09.29 |
---|---|
[윈도우즈 시스템 프로그래밍] 쓰레드 풀에 대한 이해 (0) | 2018.09.29 |
[윈도우즈 시스템 프로그래밍] 이벤트(Event) 더하기 뮤텍스(Mutex) (0) | 2018.09.21 |
[윈도우즈 시스템 프로그래밍] 실행 순서에 있어서의 동기화 (0) | 2018.09.21 |
[윈도우즈 시스템 프로그래밍] 커널 모드 동기화(2) (0) | 2018.09.16 |