为什么同一个线程可以弹出多个MessageBox? 不是说MessageBox会导致程序暂停执行吗?怎么可以通过WM_TIME消息可以让一个线程弹出多个MessageBox 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 timer本身是多线程吧,如果弹出框在timer对应的函数里边,那么弹出框只是阻止了此消息函数向下运行,下一个时间点到时还会运行此消息函数的。 不是说MessageBox会导致程序暂停执行吗? 谁说的?MessageBox相当于模态对话框,拦截了线程的键盘和鼠标消息,但是其他消息照样可以得到处理 为什么可以得到处理啊?主窗口的窗口函数调用了OnTimerOnTimer里面调用了Messagebox只要不点击确定,MessageBOx函数就不退出OnTimer也就不退出主窗口的窗口函数无法返回主窗口的消息循环被卡死问题是还能弹出在其他的MessageBox,说明WM_TIMER 得到了处理。这个处理肯定不是再主窗口的消息循环里面处理的。也就是说MessageBox内部应该有一个循环,在不停地处理主窗口队列里面的消息。应该是这样吧。 timer本身是多线程吧======timer并不是多线程的 WM_TIMER消息是不会被弹住的你想想看,如果MessageBox能把所有的消息都弹住,我用其它窗口子你的界面上晃两下,那你的界面岂不是面目全非了 这样看来DoModal()函数内有类似中断的处理方式,保留了当前运行地址,然后跳出函数,回到消息循环。在响应到对话框关闭的消息后,又进入保存的地址继续执行。 WM_TIMER消息不是多线程的,你在一个线程内设置timer,那么定时会有消息投递到这个线程的消息队列。系统并不会直接调用timerproc函数,而是调用DispatchMessage处理WM_TIMER之后才会调用timerproc函数。最简单的测试方法是写一个console程序,由于它默认没有消息循环,这时你设置timer时,会无效。但是你自己加上消息循环就有效了。MessageBox会阻塞程序,但在其内部有消息循环,因此不会阻塞线程消息处理。但是事实上,每处理一次TIMER消息,弹出一个对话框,由于前一个没有点确定,也就是说上一个TIMER消息也是没有处理完的。这样不断递归,最终会耗尽资源。 怎么把负数表示出来? 寻找acdsee的源码 一个简单的对话框问题 用全局钩子可不可以钩到系统中所有的EM_SETSEL消息? 菜鸟的一个有关数据库的疑问?有谁知道吗? 各位大佬,请推荐这样的一款软件. 我大三了明年考计算机研究生,请给点建议,谢谢 测试位图数据写到内存缓冲区时的问题 VC中的左移运算符<<为何总是得出错误的结果? 回答我的问题165分归你:性格外向的人是不是也比较适合搞编程工作 VC 网络数据传输 死机了 怎么办 孔子曰:“不耻下问” 问的多,证明我爱学习。 现在开始下问!
谁说的?
MessageBox相当于模态对话框,拦截了线程的键盘和鼠标消息,但是其他消息照样可以得到处理
主窗口的窗口函数调用了OnTimer
OnTimer里面调用了Messagebox
只要不点击确定,MessageBOx函数就不退出
OnTimer也就不退出
主窗口的窗口函数无法返回
主窗口的消息循环被卡死问题是还能弹出在其他的MessageBox,说明WM_TIMER 得到了处理。
这个处理肯定不是再主窗口的消息循环里面处理的。也就是说MessageBox内部应该有一个循环,在不停地处理主窗口队列里面的消息。
应该是这样吧。
======
timer并不是多线程的
你想想看,如果MessageBox能把所有的消息都弹住,
我用其它窗口子你的界面上晃两下,那你的界面岂不是面目全非了
MessageBox会阻塞程序,但在其内部有消息循环,因此不会阻塞线程消息处理。但是事实上,每处理一次TIMER消息,弹出一个对话框,由于前一个没有点确定,也就是说上一个TIMER消息也是没有处理完的。这样不断递归,最终会耗尽资源。