求教消息循环嵌套的有关问题
求教消息循环嵌套的问题
某些界面api内部又会启动一个消息循环,直到满足一定条件才退出。
例如:对话框的DoModal,消息框的MessageBox,菜单的 TracePopupMenu
mfc的CSocket的“同步阻塞”也用类似方式来模拟。
这样从使用者角度来看,这些api好像是阻塞的,有结果才返回。但消息队列依然运转,界面不会卡住。
我的问题是,能否得到 启动和退出内部循环 的通知?
这个通知不一定是消息,也可以是回调或其它方式。
当然,可能不是所有情况都能得到通知(例如用户自建的循环),
那系统api(domodal、messagebox、tracepopupmenu等)启动的循环 是否能得到?
如果都用mfc提供的api,又能否得到?
------解决方案--------------------
某些界面api内部又会启动一个消息循环,直到满足一定条件才退出。
例如:对话框的DoModal,消息框的MessageBox,菜单的 TracePopupMenu
这些都是窗口,有自己的消息循环,不占用其它窗口的消息循环
mfc是消息分发的机制
------解决方案--------------------
孩纸 自己多思考问题就解决了。把
GetMessage(...)
DispatchMessage(...);
的while循环拆开,放在线程过程的不同地方,同样也是消息循环。
同样,把消息循环拷贝一份 放到其他地方,就知道为线程什么会卡在其它窗口消息中了,
得到通知很简单,SetWindowsHookEx,这些都是windows编程书本的东西
------解决方案--------------------
这些都有他们自己的消息循环,会阻塞父窗口的消息(注意不是阻塞父窗口的所有消息)。
某些界面api内部又会启动一个消息循环,直到满足一定条件才退出。
例如:对话框的DoModal,消息框的MessageBox,菜单的 TracePopupMenu
mfc的CSocket的“同步阻塞”也用类似方式来模拟。
这样从使用者角度来看,这些api好像是阻塞的,有结果才返回。但消息队列依然运转,界面不会卡住。
我的问题是,能否得到 启动和退出内部循环 的通知?
这个通知不一定是消息,也可以是回调或其它方式。
当然,可能不是所有情况都能得到通知(例如用户自建的循环),
那系统api(domodal、messagebox、tracepopupmenu等)启动的循环 是否能得到?
如果都用mfc提供的api,又能否得到?
------解决方案--------------------
某些界面api内部又会启动一个消息循环,直到满足一定条件才退出。
例如:对话框的DoModal,消息框的MessageBox,菜单的 TracePopupMenu
这些都是窗口,有自己的消息循环,不占用其它窗口的消息循环
mfc是消息分发的机制
------解决方案--------------------
孩纸 自己多思考问题就解决了。把
GetMessage(...)
DispatchMessage(...);
的while循环拆开,放在线程过程的不同地方,同样也是消息循环。
同样,把消息循环拷贝一份 放到其他地方,就知道为线程什么会卡在其它窗口消息中了,
得到通知很简单,SetWindowsHookEx,这些都是windows编程书本的东西
------解决方案--------------------
这些都有他们自己的消息循环,会阻塞父窗口的消息(注意不是阻塞父窗口的所有消息)。