请问connect中,如果slot函数还没有执行完, 这时又收到一个signal,是会重新执行slot,还是会等slot执行完毕再执行?
我使用QtSocket接收包,signal是readyRead(),如果我的slot函数正在执行,此时又收到一个数据包,这时会发生什么?
------解决思路----------------------
如果是同一个线程,你在执行slot时,新的信号会在你执行完slot的某个时候触发,你的slot会再次被调用。
关于signal、slot,我的书《Qt on Android核心编程》中有详细讲述,可供参考,链接中有目录。
------解决思路----------------------
调用顺序是一个队列,当slot返回,事件循环取出下一个继续调用。注意:仅在QueuedConnection的情况下。
------解决思路----------------------
1 如果同一线程中,直接连接是不会出现这样的情况的。
2 如果是队列连接,信号触发会产生一个消息放到slot对象所属线程的消息队列中去,等消息循环处理完前面的事件,再触发这个slot函数。
------解决思路----------------------
默认是直接连接,连接的时候会检查2个对象是否属于同一个线程,若是,是直接连接,若不是,是队列连接。可以查看qt源码。