MFC定时器一次性执行

时间:2013-05-11 21:25:36

标签: visual-c++ mfc timer

我使用MFC在c ++中编程。

我希望在UI完全加载后执行一段代码,所以我把它放在OnTimer回调中并在OnInitDialog中调用SetTimer。问题是如何使该计时器只执行一次?

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:2)

你必须使用KillTimer函数,但只需要在执行计时器时要小心。 例如,您编写如下代码,

#define TID_ONLY_ONCE WM_USER + 202
void CSampleDlg::OnTimer(UINT_PTR nIDEvent)
{
    if(nIDEvent == TID_ONLY_ONCE)
    {
        KillTimer(TID_ONLY_ONCE);
        SomethingLongProcess(pSomeData);
    }
    CDialog::OnTimer(nIDEvent);
}

如果你很快设置了计时器,虽然你打电话给KillTimer,'ontimer()'会被执行几次,因为SomethingLongProcess需要很长时间。 所以,为了避免这种情况,

  • 在调用SetTimer()后立即调用KillTimer()。
  • 或使用全局bool成员。调用SetTimer后,将全局成员设置为true,然后在OnTimer()中,检查此值是否将执行SomethingLongProcess()。

我希望这对你有所帮助。

答案 1 :(得分:1)

您也可以使用PostMessage向自己发布消息,而不是使用计时器,这将使待处理的窗口消息队列得到处理。然后,您可以在PostMessage处理程序中执行您想要的操作。这样你就不用担心杀死计时器了。 (见http://msdn.microsoft.com/en-us/library/9tdesxec%28v=vs.80%29.aspx

答案 2 :(得分:-1)

第一次调用timer函数时,调用KillTimer。