MFC OnTimer 从其他地方接收额外事件
Posted
技术标签:
【中文标题】MFC OnTimer 从其他地方接收额外事件【英文标题】:MFC OnTimer receiving extra events from somewhere else 【发布时间】: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 添加一些文本。 【参考方案1】:这是 Windows 计时器的本质。所有计时器事件都由单个消息 WM_TIMER 处理,您的 OnTimer
函数应该检查它可以处理的特定事件。一些 Windows 组件可以生成自己的计时器请求,而这些请求不会通过 MFC 的 SetTimer 函数来触发您的断点。
【讨论】:
我刚刚注意到这一点,例如我从代码中删除了 SetTimer 事件。当我左键单击并拖动 RichEditView 窗口时,此问题是可重复的,我猜这将是 MFC 的预期响应,问题是它卡住并继续调用它,即使我没有使用左键单击/拖动.以上是关于MFC OnTimer 从其他地方接收额外事件的主要内容,如果未能解决你的问题,请参考以下文章