CDialog에 있는 OnTimer


OnTimer라는 메세지 핸들러는 SetTimer(타이머ID, 발생간격, 실행하려는 함수명)​과 함께 사용한다

// ​여기서 함수명에 NULL을 넣어주면 OnTimer를 사용


일정 시간 뒤에 원하는 업무를 처리하기 사용한다.

 

비슷한 기능으로 Sleep( millisecond ) 를 입력하는데

Sleep을 이용할 경우 해당 쓰레드 전체가 멈추어 버리고 그 멈춤에 따라 외부 인터럽트입력(키보드, 마우스, 등등)이

주어지게 되면 버퍼에 쌓였다가 한번에 처리되는 일이 발생하게 된다.

 

그래서 그걸 방지하기 위해 Timer를 사용하는데 사용방법은 다음과 같다.

 

 

 

등록

 BEGIN_MESSAGE_MAP(CGroupChatWindow, CDialog)

...

ON_WM_TIMER()

...

 END_MESSAGE_MAP()

메세지 맵에 'ON_WM_TIMER()'를 등록

 

 

타이머 시작

 SetTimer(1394,1000,NULL);

  파라매터

1) Timer의 ID값

2) SetTimer후 몇 millisecond후 마다 실행 (반복실행)

3) 함수명, NULL 사용시 오버라이드 함수 'OnTimer()'로 작동된다.

  반환값 : 핸들러

 

 

 

선언

 afx_msg void OnTimer(UINT nIDEvent);

헤더파일에 선언

 

 

 

오버라이드 함수 내부

 void CGroupChatWindow::OnTimer(UINT nIDEvent)
 {
    switch(nIDEvent)
    {
        case 1394:

             limitLatencyClickAble = TRUE;   
             mCheckSendVoice.EnableWindow(TRUE);

             break;
    }

    KillTimer(1394);
}

switch문을 사용하여 Timer의 ID를 구분하여 처리

SetTimer에 첫 파라매터에 1394를 적었기에 OnTimer( )에서는 switch문에 case로 1394

 

 

 

타이머 중지

 KillTimer(1394);

타이머 아이디를 입력하면 끝


+ Recent posts