2014-10-31 2 views
0

SetTimer 함수로 만든 타이머의 현재 진행 상태를 확인할 방법이 있습니까?SetTimer()로 만든 타이머의 진행을 얻는 방법

+0

당신이 '현재 진행'무엇을 의미합니까? (a) 처음 생성 된 이후의 기간 또는 (b) 마지막으로 실행 된 이후의 시간 또는 (c) 다음에 실행될 때까지의 기간을 확인 하시겠습니까? – enhzflep

+2

아니요. 타이머를 시작할 때 GetTickCount()의 반환 값을 변수에 저장합니다. WM_TIMER 핸들러에서 업데이트하십시오. 이제 GetTickCount()에서 변수 값을 빼는 방법으로 시간이 얼마나 남았는지 항상 알 수 있습니다. –

+0

GetTickCount()가있는 솔루션은 합리적인 것처럼 보입니다. 구현하자마자 응답을 추가하겠습니다. –

답변

1

다음은 한스 주석의 구현입니다. 버튼을 클릭하면 다음 예약 (예상) WM_TIMER 메시지까지 남은 시간이 표시됩니다. 디버그 모드로 구축하면 GUI와 콘솔을 모두 얻는 것이 쉽고 (읽기 : 더러운) 방식이기 때문에 메시지를 표시 할 콘솔을 얻게됩니다.

MAIN.CPP

#include <windows.h> 
#include <commctrl.h> 
#include <stdio.h> 
#include "resource.h" 

HINSTANCE hInst; 

DWORD tickCountInitial; 
DWORD timerInterval = 10000; 
DWORD nextTimerFired; 

BOOL CALLBACK DlgMain(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    switch(uMsg) 
    { 
     case WM_INITDIALOG: 
     { 
      tickCountInitial = GetTickCount(); 
      SetTimer(hwndDlg, 666, timerInterval, NULL); 
      nextTimerFired = tickCountInitial + timerInterval; 
     } 
     return TRUE; 

     case WM_TIMER: 
     { 
      DWORD tickCountCurrent = GetTickCount(); 
      printf("Ticks elapsed: %d\n", tickCountCurrent - tickCountInitial); 
      nextTimerFired = tickCountCurrent + timerInterval; 
      MessageBeep(MB_OK); 
     } 
     return 0; 

     case WM_CLOSE: 
     { 
      EndDialog(hwndDlg, 0); 
     } 
     return TRUE; 

     case WM_COMMAND: 
     { 
      switch(LOWORD(wParam)) 
      { 
       case IDC_BUTTON1: 
       { 
        DWORD tickCountCurrent = GetTickCount(); 
        printf("Ticks till next WM_TIMER message: %d\n", nextTimerFired - tickCountCurrent); 
       } 
       break; 
      } 
     } 
     return TRUE; 
    } 
    return FALSE; 
} 

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) 
{ 
    hInst=hInstance; 
    InitCommonControls(); 
    return DialogBox(hInst, MAKEINTRESOURCE(DLG_MAIN), NULL, (DLGPROC)DlgMain); 
} 

및 Resource.h

#ifndef IDC_STATIC 
#define IDC_STATIC (-1) 
#endif 

#define DLG_MAIN        100 
#define IDC_BUTTON1        40000 

resource.rc

// Generated by ResEdit 1.6.2 
// Copyright (C) 2006-2014 
// http://www.resedit.net 

#include <windows.h> 
#include <commctrl.h> 
#include <richedit.h> 
#include "resource.h" 




// 
// Dialog resources 
// 
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL 
DLG_MAIN DIALOG 0, 0, 186, 95 
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU 
CAPTION "Dialog" 
FONT 8, "Ms Shell Dlg" 
{ 
    PUSHBUTTON  "Check Remaining", IDC_BUTTON1, 41, 32, 104, 31, 0, WS_EX_LEFT 
} 



// 
// Manifest resources 
// 
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL 
1     RT_MANIFEST ".\\manifest.xml" 
관련 문제