mfc 弹出对话框 阻止定时函数
mfc程序,基于视图文档框架,在view类有个定时器,定时计算显示。菜单可以打开对话框,控制进度。问题是对话框打开后(domodal),定时器还在发送消息,计算和显示还在...
mfc程序,基于视图文档框架,在view类有个定时器,定时计算显示。菜单可以打开对话框,控制进度。
问题是对话框打开后(domodal),定时器还在发送消息,计算和显示还在进行。如何阻止定时消息?我知道killTimer好使,除了这个方法,还有其他更好方法吗?
有个疑惑:不是单线程吗,为什么domodal后面的代码还没运行,定时函数就运行了?难道是中断了?
谢谢高手解答。
谢谢2013。你的解释有点牵强,我试了下,如果将domodal改成死循环,则可以停止定时函数的运行。因此原因可能是domodal,可以被中断。等合理的解释。 展开
问题是对话框打开后(domodal),定时器还在发送消息,计算和显示还在进行。如何阻止定时消息?我知道killTimer好使,除了这个方法,还有其他更好方法吗?
有个疑惑:不是单线程吗,为什么domodal后面的代码还没运行,定时函数就运行了?难道是中断了?
谢谢高手解答。
谢谢2013。你的解释有点牵强,我试了下,如果将domodal改成死循环,则可以停止定时函数的运行。因此原因可能是domodal,可以被中断。等合理的解释。 展开
2个回答
展开全部
要解释这个问题,首先要理解Windows程序的执行原理。我觉得这个问题有一点技术含量,下面是我的一些猜想,不知道正确不正确,欢迎各位吐槽。
Windows
程序都会有一个主循环来控制消息的获取和派发,调用对话框的DoModal时,实际上应该是进入了另外一个循环体,这个循环体仍然会收到系统发来的所有消
息(因为它也会调用GetMessage函数来获取消息。),但是它碰到父窗口的某些消息,就不会继续往上派发,这样实现了模态的效果。
至于定时器消息(WM_TIMER)为什么还会继续往上面派发,我猜想是他只拦截鼠标和键盘的消息吧。
Windows
程序都会有一个主循环来控制消息的获取和派发,调用对话框的DoModal时,实际上应该是进入了另外一个循环体,这个循环体仍然会收到系统发来的所有消
息(因为它也会调用GetMessage函数来获取消息。),但是它碰到父窗口的某些消息,就不会继续往上派发,这样实现了模态的效果。
至于定时器消息(WM_TIMER)为什么还会继续往上面派发,我猜想是他只拦截鼠标和键盘的消息吧。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询