【问题标题】:How to Use Timer in MFC Dialog based Application?如何在基于 MFC 对话框的应用程序中使用计时器?
【发布时间】:2011-11-01 16:38:31
【问题描述】:

我正在 Visual Studio 2008 中开发基于 MFC 对话框的应用程序。我想使用在应用程序启动时启动并继续运行并调用执行我的任务的函数的计时器?我该怎么做?

谢谢

【问题讨论】:

  • 我收到此错误:错误 C3867:'CHDVRLauncherDlg::TimerFunction':函数调用缺少参数列表;使用 '&CHDVRLauncherDlg::TimerFunction' 创建指向成员的指针。如果我将回调函数声明为静态,那么我无法从此回调中调用我的其他函数。我是 MFC 的新手。谢谢
  • 您应该考虑的其他方法是:每隔一段时间获取当前时间,并检查是否经过了足够的时间,或者启动一个将调用sleep(long millisecs);的新线程(或进程),然后调用你想要的任何函数。

标签: c++ c mfc


【解决方案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() 将其关闭。

【讨论】:

    【解决方案2】:

    如果您想了解使用定时器的基本概念,请查看此链接并逐步了解如何使用定时器。之后,您应该可以随时在应用程序中轻松使用计时器。

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

    希望这会有所帮助。

    干杯。

    【讨论】:

      【解决方案3】:

      只需使用SetTimer 方法,并传递两个参数:定时器ID(任意数字)和超时时间(以毫秒为单位)。然后写下OnTimer 的实现,在BEGIN_MESSAGE_MAP...END_MESSAGE_MAP 里面写一个ON_WM_TIMER

      CWnd::SetTimer 需要 3 个参数,但只需要 2 个。将第三个参数作为 NULL 传递。

      CWnd::OnTimer

      【讨论】:

      • 切记不要在构造函数中调用SetTimer,即在窗口句柄存在之前!...
      猜你喜欢
      • 2011-02-12
      • 1970-01-01
      • 2021-03-12
      • 1970-01-01
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多