본문 바로가기

무작정 따라해보기(정리, 문제풀기)/Win32API

20. WIN32API 프로그래밍 - 타이머 관련

728x90

 

'나우캠퍼스X아워즈팜'유튜브의 'Win32 API 6강. 키보드와 마우스, 타이머 (3/3)'영상을 보고 정리한 내용입니다.

 

타이머 관련 메시지 & 함수


컴퓨터를 켜면 운영체제가 실행되기 전 컴퓨터 안에 있는 CMOS에서 하드웨어 시스템에 대해서 체크를 합니다.

CMOS는 컴퓨터를 실행하고 바로 시간을 재기 시작하며 시간에 대한 정보들을 가지고 있습니다.

 

그렇게 계속 발생이 되는 컴퓨터의 시간 관련 정보들을 가져와서 프로그램 안에서 쓸 수 있도록 해주는 것이 os의 타이머입니다.
타이머는 일정한 간격마다 메시지를 발생시키고(WM_TIMER), 함수를 실행시킬 수도 있습니다. 그래서 일정한 시간이 됐을 때 어떠한 처리를 시킬 수 있습니다.(코드를 실행)

 

타이머를 생성하는 함수

  • SetTimer()
  • UINT_PTR SetTimer(
        HWND hWnd,
        UINT_PTR nIDEvent,
        UINT uElapse,
        TIMERPROC lpTimerFunc);
  • hWnd : 윈도우 핸들
  • nIDEvent : 타이머의 아이디(양의 정수값)
  • uElapse : 몇 ms가(1000ms는 1초) 지날 때마다 메시지를 발생시키고 또는 함수를 호출할 것인지
  • lpTimerFunc : 호출할 함수명. 없다면 NULL 또는 0. TIMEPROC형은 함수 포인터형(콜백함수의 주소)

 

타이머를 해제하는 함수

  • KillTimer()
  • BOOL KillTimer(
        HWND hWnd,
        UINT_PTR uIDEvent);
  • hWnd : 윈도우 핸들
  • uIDEvent: 생성한 타이머의 아이디(양의 정수값)

 

타이머가 처리하는 방식

  • 콜백함수 실행으로 처리
  • WM_TIMER 메시지에 따른 처리

 

WM_TIMER 메시지에 따른 처리

  • WM_TIMER메시지가 발생할 때 처리를 하는 방식
  • 부가적인 정보를 담아주는 wParam. wParam에는 타이머의 아이디(양의 정수값)이 들어있다.

 

콜백함수 실행으로 처리

  • 콜백함수는 누군가에 의해서 호출이 되는 함수.
  • 함수를 부르는 곳에서 이미 그 함수의 형식을 정해놓기 때문에 그 형식에서 벗어나면 안 된다.
  • typedef VOID (CALLBACK* TIMERPROC)(HWND, UINT, UINT_PTR, DWORD);
    차례대로 윈도우 핸들, WM_TIMER 메시지, 아이디, 경과된 시간과 관련된 인자가 들어온다.

 

 

오류가 있다면 알려주시면 감사하겠습니다!