【问题标题】:MFC OnTimer receiving extra events from somewhere elseMFC OnTimer 从其他地方接收额外事件
【发布时间】:2014-11-05 22:49:46
【问题描述】:

我有一个使用 ON_WM_TIMER 的 MFC 应用程序。

前 1-2 分钟,我用

启动计时器
m_nIDEvent = SetTimer( 234, 500, NULL );

这是完美的工作,但在运行应用程序 2-3 分钟后,我收到另一个事件,我不知道它来自哪里,每 100 毫秒左右。

所以,我有 无效 SomeClass::OnTimer(UINT 事件) { 字符 str[100]; sprintf_s(str, "事件 = %d\n", 事件); }

起初它只打印出事件#234,但在2-3分钟后它开始显示430-432的一些事件。有什么想法吗?

我尝试在 afxwin2.inl (其中定义了 SetTimer )处设置断点,并且在事件中我按预期将其停在那里,而不是其他随机事件。

有什么想法吗?

谢谢!

【问题讨论】:

  • 旧浏览器不允许我编辑它,但我没有添加 OnTimer 上的打印语句。
  • Windows 内部使用计时器来实现某些视觉效果。您能否更具体地说明您所指的“SomeClass”?
  • 是的,对不起。我有一个名为 Viewer2 的类,它是 CRichEditView 的基类。现在我保持简单,只使用 WM_TIMER 向 CRichEditView 添加一些文本。

标签: c++ mfc


【解决方案1】:

这是 Windows 计时器的本质。所有计时器事件都由单个消息 WM_TIMER 处理,您的 OnTimer 函数应该检查它可以处理的特定事件。一些 Windows 组件可以生成自己的计时器请求,而这些请求不会通过 MFC 的 SetTimer 函数来触发您的断点。

【讨论】:

  • 我刚刚注意到这一点,例如我从代码中删除了 SetTimer 事件。当我左键单击并拖动 RichEditView 窗口时,此问题是可重复的,我猜这将是 MFC 的预期响应,问题是它卡住并继续调用它,即使我没有使用左键单击/拖动.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 2018-07-07
相关资源
最近更新 更多