回复: QT多线程信号槽无作用
#6 [alban.wang 08-21 15:08]
suzhuorui:
我看了一下代码,觉得你是想要实现点击按钮来控制线程中事务的开启与关闭,也不知道你是不是要搞这个。首先说一下信号接收不到的原因,在start线程后,运行run函数,但是run函数中存在while死循环,所以控制权一直在run函数中,没有出去,所以接收不到主界面给的信号,你把while去掉后再看看,其实是可以收到信号的。也不知道我说的对不对,反正我是这么理解的。至于你要的功能,我贴出来你看看,反正我是用定时器搞得。
信号槽的原理还不太明白,但是原因就是这个问题导致的,从这个出发点,我换一个延时函数,也能发送信号槽了
#7 [flywindytc 11-26 11:13]
线程运行时,只有run函数中的代码可以被运行,而该段代码又是一个死循环,没有事件处理机制,因此,其他对象在发送与该线程相关的信号时,是无法响应的,五楼,六楼的说法基本正确。
实际上不需要五楼六楼说的那么复杂,直接在run函数的循环体中加上
QCoreApplication::processEvents();就可以了,这样在run函数的循环体中也可以处理来自外部的事件(因为是跨线程,那么其他线程的对象发送而来的信号,就会被封装成事件交到该线程对象的事件队列里)