• 4797阅读
  • 5回复

谁能详解下exec()这个函数?求大神 用自己都理解 [复制链接]

上一主题 下一主题
离线zeroctu
 
只看楼主 倒序阅读 楼主  发表于: 2012-04-19
关键词: execQT4求助问题
beging
离线翠屏阿姨
只看该作者 1楼 发表于: 2012-04-19
不敢自己说大神,我的理解是这样的:
exec()运行后,Qt就进入事件循环,在那儿循环等待用户的动作,用户产生一个动作后,这个循环捕捉它,把它分析看看是什么类型,确定之后,采用对应的事件处理器进行处理。
我就把最左边那个圆看成循环exec()。它一步步分析捕捉到的事件,最终执行相应的命令。
目前还是Qt菜鸟
离线gonna

只看该作者 2楼 发表于: 2012-04-19
看看它的源码吧
离线淳于半邪

只看该作者 3楼 发表于: 2012-04-19
引用第1楼翠屏阿姨于2012-04-19 16:28发表的  :
不敢自己说大神,我的理解是这样的:
exec()运行后,Qt就进入事件循环,在那儿循环等待用户的动作,用户产生一个动作后,这个循环捕捉它,把它分析看看是什么类型,确定之后,采用对应的事件处理器进行处理。
[图片]我就把最左边那个圆看成循环exec()。它一步步分析捕捉到的事件,最终执行相应的命令。



离线zooood
只看该作者 4楼 发表于: 2012-04-23
事件循环是可以嵌套的,一层套一层,子层的事件循环执行exec()的时候,父层事件循环就处于中断状态;当子层事件循环跳出exec()后,父层事件循环才能继续循环下去。
另外,子层事件循环具有父层事件循环的几乎所有功能。Qt会把事件送到当前生效的那个事件循环队列中去,其中包括Gui的各种事件。所以用户在主线程中执行各种exec()(如QMessageBox::exec(),QEventLoop::exec())的时候,虽然这些exec()打断了main()中的QApplication::exec(),但是Gui界面仍然能够正常响应。
离线dxfans

只看该作者 5楼 发表于: 2012-04-23
引用第4楼zooood于2012-04-23 18:39发表的  :
事件循环是可以嵌套的,一层套一层,子层的事件循环执行exec()的时候,父层事件循环就处于中断状态;当子层事件循环跳出exec()后,父层事件循环才能继续循环下去。
另外,子层事件循环具有父层事件循环的几乎所有功能。Qt会把事件送到当前生效的那个事件循环队列中去,其中包括Gui的各种事件。所以用户在主线程中执行各种exec()(如QMessageBox::exec(),QEventLoop::exec())的时候,虽然这些exec()打断了main()中的QApplication::exec(),但是Gui界面仍然能够正常响应。

如果是循环的话,那么while语句一直在那跑的话,CPU占有率会很高???
快速回复
限100 字节
 
上一个 下一个