1. 如果一个单文档(SDI)的MFC程序,只有一个主线程,那么这个应用程序有几个消息循环?几个消息队列?
系统消息队列和用户消息队列各保存什么消息?这些消息队列在什么地方?
2.如果一个多文档(MDI)文档的MFC程序,只有一个主线程,那么这个应用程序有几个消息循环?几个消息队列?
系统消息队列和用户消息队列各保存什么消息?这些消息队列在什么地方?
3.如果一个单文档(SDI)的MFC程序,除了有一个主线程外,还有两个工作者线程和三个用户界面线程,
那么这个应用程序有几个消息循环?几个消息队列?系统消息队列和用户消息队列各保存什么消息?这些消息队列在什么地方?
4.是不是每个窗口都有一个消息队列?
5.消息循环,消息队列,线程,窗口之间关系到底是怎么样的呢?非常感谢!!!
系统消息队列和用户消息队列各保存什么消息?这些消息队列在什么地方?
2.如果一个多文档(MDI)文档的MFC程序,只有一个主线程,那么这个应用程序有几个消息循环?几个消息队列?
系统消息队列和用户消息队列各保存什么消息?这些消息队列在什么地方?
3.如果一个单文档(SDI)的MFC程序,除了有一个主线程外,还有两个工作者线程和三个用户界面线程,
那么这个应用程序有几个消息循环?几个消息队列?系统消息队列和用户消息队列各保存什么消息?这些消息队列在什么地方?
4.是不是每个窗口都有一个消息队列?
5.消息循环,消息队列,线程,窗口之间关系到底是怎么样的呢?非常感谢!!!
2,同上
3
其实就是当用户调用了设计消息循环的函数时(比如创建窗口,调用GetMessage等)时,系统为线程创建消息队列,由系统管理,属于这个线程的所有界面对象的消息都放在这里,由GetMessage等函数来取得消息,当GetMessage处在一个循环中时就是一个消息循环(就是不断的取消息的意思).
b、一个线程至多可以拥有一个消息队列,MFC的UI线程在int CWinThread::Run()内会调用::PeekMessage()、BOOL CWinThread::PumpMessage(),而在PumpMessage()里会调用::GetMessage()、::TranslateMessage()、::DispatchMessage(),而这些合起来(包括Run()里的几个循环)就构成了一个完整的消息循环
c、窗口是属于线程的,同一线程内的窗口共享此线程的消息队列、消息循环
d、其实一个单文档(SDI)的MFC程序,就有很多的窗口在里面,比如框架、菜单、工具条、状态条等等都是一个窗口
e、消息队列由OS管理,其实就是一个受保护的数据结构罢了,消息队列如果存满消息(有大小限制),就会丢消息了,只要把程序耗住(可以阻塞、也可耗CPU),并且用一种可验证的方法发消息给它,你就可以见到了
顺便问一下楼上的兄弟:嵌套的消息循环啥样子的,没碰过,可能是孤陋寡闻了
工作者线程什么都没有,没意义1 一个消息循环 一个消息队列
2 一个消息循环 一个消息队列
3 主线程一个消息循环 一个消息队列,三个用户界面线程对应3个消息循环 3个消息队列
4 不是
5.每个线程对应一个消息队列,每个消息队列对应一个消息循环(要是不开消息循环就没意义了)
一个线程可以n个窗口,它们共享一个消息队列 weirdy(远古传说)说的嵌套的消息循环是故意骗你的,即便是模式对话框仍和线程内的其它窗体共享一个消息循环
消息队列分系统消息队列和线程消息队列,系统产生的消息都会先进入系统消息队列再由系统分捡送入各相应线程的消息队列。
消息循环只有一个,但可嵌套。这是由程序从消息队列取出消息-处理-返回-再取出消息这样一个消息循环所决定的。当多个消息循环相嵌套时,只会一层一层的从最里层到最外层返回。这就WINDOWS程序的以消息为基础以事件驱动的模式运作的。你学习一下SDK编程就能很好的理解WIN程序的运作模式。