0
有什麼方法可以獲取由SetTimer函數創建的計時器的當前進度?如何獲取使用SetTimer()創建的計時器的進度
有什麼方法可以獲取由SetTimer函數創建的計時器的當前進度?如何獲取使用SetTimer()創建的計時器的進度
下面是漢斯評論的實現。單擊該按鈕可顯示下一個計劃的(預期的)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
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"
你說的 '目前的進展' 是什麼意思?你是否希望瞭解:(a)最初創建多久或(b)最後一次發射多久或(c)多長時間纔會發射? – enhzflep 2014-10-31 16:02:46
否。啓動計時器時,將GetTickCount()的返回值存儲在變量中。在WM_TIMER處理程序中更新它。現在你總是知道剩下多少時間,只需從GetTickCount()中減去該變量值即可。 – 2014-10-31 16:10:32
GetTickCount()的解決方案看起來很合理,只要我實現它,我就會添加一個答案。 – 2014-10-31 16:18:09