当前位置: 代码迷 >> QT开发 >> 请教connect中,如果slot函数还没有执行完, 又收到一个signal会发生什么
  详细解决方案

请教connect中,如果slot函数还没有执行完, 又收到一个signal会发生什么

热度:122   发布时间:2016-04-25 03:04:57.0
请问connect中,如果slot函数还没有执行完, 又收到一个signal会发生什么?
请问connect中,如果slot函数还没有执行完, 这时又收到一个signal,是会重新执行slot,还是会等slot执行完毕再执行?
我使用QtSocket接收包,signal是readyRead(),如果我的slot函数正在执行,此时又收到一个数据包,这时会发生什么?
------解决思路----------------------
本帖最后由 foruok 于 2014-12-13 18:40:31 编辑
如果是同一个线程,你在执行slot时,新的信号会在你执行完slot的某个时候触发,你的slot会再次被调用。
关于signal、slot,我的书《Qt on Android核心编程》中有详细讲述,可供参考,链接中有目录。
------解决思路----------------------
调用顺序是一个队列,当slot返回,事件循环取出下一个继续调用。注意:仅在QueuedConnection的情况下。
------解决思路----------------------
1 如果同一线程中,直接连接是不会出现这样的情况的。
2 如果是队列连接,信号触发会产生一个消息放到slot对象所属线程的消息队列中去,等消息循环处理完前面的事件,再触发这个slot函数。
------解决思路----------------------
引用:
Quote: 引用:

调用顺序是一个队列,当slot返回,事件循环取出下一个继续调用。注意:仅在QueuedConnection的情况下。

默认的是Auto那个参数吧?我使用的是默认的参数,这样就会有问题吗?
默认是直接连接,连接的时候会检查2个对象是否属于同一个线程,若是,是直接连接,若不是,是队列连接。可以查看qt源码。
  相关解决方案