다음을 통해 공유


CWnd::SetTimer

시스템 타이머를 설치합니다.

UINT_PTR SetTimer( 
   UINT_PTR nIDEvent, 
   UINT nElapse, 
   void (CALLBACK* lpfnTimer 
)(HWND, 
   UINT, 
   UINT_PTR, 
   DWORD 
)  
);

매개 변수

  • nIDEvent
    타이머가 0이 아닌 식별자를 지정합니다. 타이머 식별자가 고유한 경우 이 동일한 값이 SetTimer로 반환됩니다. 그렇지 않으면, SetTimer 새 고유값을 결정하고 반환합니다. 창 타이머(NULL 콜백 함수가 있음)의 경우 값은 현재 창과 관련된 다른 창에 대해서만 고유해야 합니다. 콜백 타이머의 경우 값은 모든 프로세스에 대한 모든 타이머에 대해 고유해야 합니다. 따라서 콜백 타이머를 만드는 경우 반환된 값은 지정한 값과 다를 수 있습니다.

  • nElapse
    제한 시간 값 또는 간격(밀리초)을 지정합니다.

  • lpfnTimer
    응용 프로그램에서 제공한 주소 지정 TimerProc 콜백 함수를 처리하는 WM_TIMER 메시지. 이 매개 변수가 NULL인 경우 WM_TIMER 메시지가 응용 프로그램의 메시지 큐에 저장되고 CWnd 개체에 의해 처리됩니다.

반환 값

함수가 성공할 경우 새로운 타이머의 타이머 식별자입니다. 이 값은 nIDEvent 매개 변수를 통해 전달된 값과 동일하거나 동일하지 않을 수 있습니다. 응용 프로그램은 항상 타이머를 지우기 위해 KillTimer 멤버 함수에 반환 값을 전달해야 합니다. 성공하면 0이 아니고, 그렇지 않으면 0입니다.

설명

간격 값이 지정되고 간격을 초과할 때마다 시스템은 설치 응용 프로그램의 설치 메시지 큐에 WM_TIMER 메시지를 게시하거나 응용 프로그램 정의된 TimerProc 콜백 함수에 메시지를 전달합니다.

lpfnTimer 콜백 함수가 명명된 TimerProc이 아니어도 되지만 정적으로 선언되고 다음과 같이 정의되어야 합니다.

void CALLBACK TimerProc(
   HWND hWnd,      // handle of CWnd that called SetTimer
   UINT nMsg,      // WM_TIMER
   UINT_PTR nIDEvent,   // timer identification
   DWORD dwTime    // system time
);

예제

이 예제는 CWnd::SetTimer, CWnd::OnTimerCWnd::KillTimer를 사용해서 WM_TIMER 메시지를 처리합니다. OnStartTimer에서 2초마다 기본 프레임 창으로 WM_TIMER 메시지를 전송하도록 첫 번째 타이머가 설정되었습니다. OnTimer 이벤트 처리기는 주 프레임 창에 대한 WM_TIMER 메시지를 처리합니다. 이 메서드는 PC 스피커에서 2초마다 경고음을 울립니다. 두 번째 타이머는 3.75 초 마다 콜백 함수에 메시지를 보냅니다. OnStopTimer는 각 타이머 ID에 대한 CWnd::KillTimer를 호출하는 두 타이머 모두에 의해 정지됩니다.

void CMainFrame::OnStartTimer() 
{
    // This timer uses a WM_TIMER message, not a callback. 
    // Therefore, the timer is specific to this window. 
    // m_nWindowTimer is a UINT_PTR field.
    m_nWindowTimer = SetTimer(1, 2000, NULL);
    
    // For this demo, we specify an interval that won't overlap 
    // with the window timer.
    m_nCallbackTimer = SetTimer(2, 3750, &CMainFrame::MyTimerProc);
    
    // See whether we got the ID we requested in the first parameter.
#ifdef _DEBUG
    CString str;
    str.Format(_T("m_ncallbackTImer ID = %d"), m_nCallbackTimer);
    TRACE(str);
#endif

}

 void CALLBACK CMainFrame::MyTimerProc(
   HWND hWnd,      // handle of CWnd that called SetTimer
   UINT nMsg,      // WM_TIMER
   UINT_PTR nIDEvent,   // timer identification
   DWORD dwTime    // system time
)
{
     MessageBeep(0x00000030L);   // Windows question sound.
}

void CMainFrame::OnStopTimer() 
{
   KillTimer(m_nWindowTimer);   
   KillTimer(m_nCallbackTimer);   
}

void CMainFrame::OnTimer(UINT nIDEvent) 
{
   MessageBeep(0xFFFFFFFF);   // Beep 


   // Call base class handler.
   CMDIFrameWnd::OnTimer(nIDEvent);
}

요구 사항

헤더: afxwin.h

참고 항목

참조

CWnd 클래스

계층 구조 차트

WM_TIMER

CWnd::KillTimer

SetTimer