mfc 弹出对话框 阻止定时函数

mfc程序,基于视图文档框架,在view类有个定时器,定时计算显示。菜单可以打开对话框,控制进度。问题是对话框打开后(domodal),定时器还在发送消息,计算和显示还在... mfc程序,基于视图文档框架,在view类有个定时器,定时计算显示。菜单可以打开对话框,控制进度。
问题是对话框打开后(domodal),定时器还在发送消息,计算和显示还在进行。如何阻止定时消息?我知道killTimer好使,除了这个方法,还有其他更好方法吗?
有个疑惑:不是单线程吗,为什么domodal后面的代码还没运行,定时函数就运行了?难道是中断了?
谢谢高手解答。
谢谢2013。你的解释有点牵强,我试了下,如果将domodal改成死循环,则可以停止定时函数的运行。因此原因可能是domodal,可以被中断。等合理的解释。
展开
 我来答
junlin1991
2016-08-06 · TA获得超过354个赞
知道小有建树答主
回答量:257
采纳率:0%
帮助的人:109万
展开全部
要解释这个问题,首先要理解Windows程序的执行原理。我觉得这个问题有一点技术含量,下面是我的一些猜想,不知道正确不正确,欢迎各位吐槽。
Windows
程序都会有一个主循环来控制消息的获取和派发,调用对话框的DoModal时,实际上应该是进入了另外一个循环体,这个循环体仍然会收到系统发来的所有消
息(因为它也会调用GetMessage函数来获取消息。),但是它碰到父窗口的某些消息,就不会继续往上派发,这样实现了模态的效果。
至于定时器消息(WM_TIMER)为什么还会继续往上面派发,我猜想是他只拦截鼠标和键盘的消息吧。
One_More_2013
2014-07-01 · TA获得超过682个赞
知道小有建树答主
回答量:1028
采纳率:50%
帮助的人:287万
展开全部
定时器,是你settimer启动的,估计是你settimer这个启动函数在domodal的时候被调用了,domodal的时候,对话框有一系列的初始化的。

还有定时器只能用killTimer来结束。或者你增加一个变量,在定时器里面根据这个变量做一次判断
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式