• 7296阅读
  • 8回复

[提问]请教窗体与Gui主线程的问题 [复制链接]

上一主题 下一主题
 
只看楼主 倒序阅读 楼主  发表于: 2011-03-24
       假设程序正常运行时,只有一个简单的窗体A,此时只有一个GUI主线程,在这个主线程中有一个事件循环处理窗体上的事件。当此程序运行到某阶段时,弹出一个模态窗体B(书上说模态窗体是有其自己的事件循环的),此时模态窗体B是否会有一个对应的子线程处理其事件循环?
请教大虾们啦。
离线wxj120bw

只看该作者 1楼 发表于: 2011-03-24
引用楼主我要下载代码于2011-03-24 17:55发表的 请教窗体与Gui主线程的问题 :
       假设程序正常运行时,只有一个简单的窗体A,此时只有一个GUI主线程,在这个主线程中有一个事件循环处理窗体上的事件。当此程序运行到某阶段时,弹出一个模态窗体B(书上说模态窗体是有其自己的事件循环的),此时模态窗体B是否会有一个对应的子线程处理其事件循环?
请教大虾们啦。

你理解的不错 如泥所说 其实根mfc一样
只看该作者 2楼 发表于: 2011-03-25
那如果是一个非模态的窗体是否会有一个对应的线程呢?难道说一个窗体(无论模态或者非模态)都对应一个线程?
[ 此帖被我要下载代码在2011-03-25 11:05重新编辑 ]
只看该作者 3楼 发表于: 2011-03-26
睡前顶顶帖,等待大虾解惑。
离线wxj120bw

只看该作者 4楼 发表于: 2011-03-26
引用第2楼我要下载代码于2011-03-25 11:05发表的  :
那如果是一个非模态的窗体是否会有一个对应的线程呢?难道说一个窗体(无论模态或者非模态)都对应一个线程?

非模态窗口有没有线程,你可以打印当前非模态窗口的线程跟主界面窗口线程比较下,还有非模态窗口跟主界面用的同一个主事件循环,要不怎么同时操作非模态窗口跟主窗口
离线dbzhang800

只看该作者 5楼 发表于: 2011-03-26
引用楼主我要下载代码于2011-03-24 17:55发表的 请教窗体与Gui主线程的问题 :
       假设程序正常运行时,只有一个简单的窗体A,此时只有一个GUI主线程,在这个主线程中有一个事件循环处理窗体上的事件。当此程序运行到某阶段时,弹出一个模态窗体B(书上说模态窗体是有其自己的事件循环的),此时模态窗体B是否会有一个对应的子线程处理其事件循环?
请教大虾们啦。



我对这些底层的东西不太了解,只针对我知道的说两点:

1. 模态窗体不一定有自己的事件循环
  如果你使用的 QDialog::exec() 打开的模态窗体,则启动事件循环
  如果你通过 dlg.setModal(true); dlg.show() 打开的模态窗体,则没有自己的事件循环

对与非模态窗体,没有自己的事件循环

2. 模态窗体的事件循环不会开新的线程来处理,而是在主线程内
(事件循环可以嵌套)


说的可能不太清楚,过两天我再想想,可能会写到blog中
只看该作者 6楼 发表于: 2011-03-27
感谢上面两位大虾的回帖。关于这部分的问题,有没有比较官方的文档可参考?或者哪位高人研究过相关的源码,分享下心得,小弟在此谢过。
离线dbzhang800

只看该作者 7楼 发表于: 2011-03-27
引用第6楼我要下载代码于2011-03-27 00:40发表的  :
感谢上面两位大虾的回帖。关于这部分的问题,有没有比较官方的文档可参考?或者哪位高人研究过相关的源码,分享下心得,小弟在此谢过。

http://hi.baidu.com/cyclone/blog/item/a8b5277fe2c0711d29388a0c.html
只看该作者 8楼 发表于: 2011-03-28
看了楼上博客,疑惑解除!感谢啊。
下面我摘抄下楼上的博客内容,借以总结一下。

"模态对话框" , "事件循环"  , "子线程" 三者之间没有必然联系!

模态与非模态只是对话框的一个属性,就像对话框是方的还是圆的那样。弹出一个新的模态对话框并不意味着开启一个新的“事件循环” 或“ 子线程”。

事件循环可以简单理解为一个while循环。启动一个事件循环,就相当于进入一个while循环。所以开启一个事件循环并不意味着启动一个新的“子线程”。
[ 此帖被我要下载代码在2011-03-28 13:38重新编辑 ]
快速回复
限100 字节
 
上一个 下一个