2011-08-23 75 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()关闭它。

相关问题