首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

求教消息循环嵌套的有关问题

2012-11-12 
求教消息循环嵌套的问题某些界面api内部又会启动一个消息循环,直到满足一定条件才退出。例如:对话框的DoMod

求教消息循环嵌套的问题
某些界面api内部又会启动一个消息循环,直到满足一定条件才退出。
例如:对话框的DoModal,消息框的MessageBox,菜单的 TracePopupMenu
mfc的CSocket的“同步阻塞”也用类似方式来模拟。
这样从使用者角度来看,这些api好像是阻塞的,有结果才返回。但消息队列依然运转,界面不会卡住。

我的问题是,能否得到 启动和退出内部循环 的通知?
这个通知不一定是消息,也可以是回调或其它方式。
当然,可能不是所有情况都能得到通知(例如用户自建的循环),
那系统api(domodal、messagebox、tracepopupmenu等)启动的循环 是否能得到?
如果都用mfc提供的api,又能否得到?


[解决办法]
某些界面api内部又会启动一个消息循环,直到满足一定条件才退出。
例如:对话框的DoModal,消息框的MessageBox,菜单的 TracePopupMenu

这些都是窗口,有自己的消息循环,不占用其它窗口的消息循环
mfc是消息分发的机制
[解决办法]
孩纸 自己多思考问题就解决了。把
GetMessage(...) 
DispatchMessage(...);
的while循环拆开,放在线程过程的不同地方,同样也是消息循环。
同样,把消息循环拷贝一份 放到其他地方,就知道为线程什么会卡在其它窗口消息中了,
得到通知很简单,SetWindowsHookEx,这些都是windows编程书本的东西


[解决办法]
这些都有他们自己的消息循环,会阻塞父窗口的消息(注意不是阻塞父窗口的所有消息)。

热点排行