2011-08-23 156 views
14

我正在Visual Studio 2008中開發基於MFC對話框的應用程序。我想使用在應用程序啓動時啓動的計時器,並繼續運行並調用執行我的任務的函數?我怎樣才能做到這一點?如何在基於MFC對話框的應用程序中使用Timer?

由於

+0

http://msdn.microsoft.com/en-us/library/49313fdf(v=vs.80).aspx – YeenFei

+0

我收到此錯誤:錯誤C3867:'CHDVRLauncherDlg :: TimerFunction':函數調用缺少參數列表;使用'&CHDVRLauncherDlg :: TimerFunction'來創建一個指向成員的指針。如果我將回調函數聲明爲static,那麼我無法從此回調調用其他函數。我是MFC新手。謝謝 –

+0

你應該考慮的其他方法是:每隔一段時間獲取一次當前時間,並檢查是否有足夠的時間過去,或者開始一個新的線程(或進程),它將調用'sleep(long millisecs);',然後調用無論你想要什麼功能。 –

回答

18

只需使用SetTimer方法,以及傳遞兩個參數:定時器ID(任何數量),並以毫秒爲單位的超時時間。然後寫下OnTimer的實現,並在BEGIN_MESSAGE_MAP...END_MESSAGE_MAP的內部輸入ON_WM_TIMER

CWnd::SetTimer需要3個參數,但只需要2個參數。將第三個參數傳遞爲NULL。

CWnd::OnTimer

1

如果你想使用定時器的基本思想,請看看這個鏈接,並經過與定時器工作的一步一步的過程。在此之後,您應該可以隨時在應用程序中輕鬆使用定時器。

鏈接:http://www.functionx.com/visualc/controls/timer.htm

希望這有助於。

乾杯。

1
_AFXWIN_INLINE UINT_PTR CWnd::SetTimer(UINT_PTR nIDEvent, UINT nElapse, 
    void (CALLBACK* lpfnTimer)(HWND, UINT, UINT_PTR, DWORD)) 

你可能想這樣做

UINT_PTR myTimer = SetTimer (1, 1000, null); // one event every 1000 ms = 1 s 

,並在窗口的事件處理程序作出反應,ON_TIMER事件:

void CMyView::OnTimer (UINT_PTR nIdEvent) 
{ 
if (nIdEvent == 1) 
    // handle timer event 
} 

另外,您可以將指針傳遞給函數處理計時器事件。保持定時器的句柄允許您在必要時使用KillTimer()關閉它。

相關問題