子线程中信号返回值的有关问题
子线程中信号返回值的问题
最近发现一个现象:
1. 一个继承于QThread的MyThread中,有一个信号int Sig(),一个槽int Slot(),这个槽的函数体只写一行return 100;
2. 在MyThread的构造函数中将这个信号和槽connect起来
3. 然后在重载的run函数中写一行int n = emit Sig();
4. 在主线程中构造MyThread对象,并start。
加断点调试,发现执行完int n = emit Sig()之后,n并不等于100,然而Slot()确实已经进去了。这是怎么回事?
------解决方案--------------------
信号与槽不在一个线程中时,信号会发送到队列中去,也就是说槽与信号是异步的过程。所以当你int n = emit Sig()这句话执行完成的时候,槽其实并还没有执行。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
Qt里emit信号就是调用信号的函数,仅此而已
信号的类型应该是void的
------解决方案--------------------
signal和slot实现了信号传递和简单的数据传递,数据传递一般使用参数,我个人不把signal理解成一个函数,可能只是起到一个函数签名的作用,运行时只是起到一个标记作用发出一个信号,只要能与对应slot呼应就可以了。
最近发现一个现象:
1. 一个继承于QThread的MyThread中,有一个信号int Sig(),一个槽int Slot(),这个槽的函数体只写一行return 100;
2. 在MyThread的构造函数中将这个信号和槽connect起来
3. 然后在重载的run函数中写一行int n = emit Sig();
4. 在主线程中构造MyThread对象,并start。
加断点调试,发现执行完int n = emit Sig()之后,n并不等于100,然而Slot()确实已经进去了。这是怎么回事?
------解决方案--------------------
信号与槽不在一个线程中时,信号会发送到队列中去,也就是说槽与信号是异步的过程。所以当你int n = emit Sig()这句话执行完成的时候,槽其实并还没有执行。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
Qt里emit信号就是调用信号的函数,仅此而已
信号的类型应该是void的
------解决方案--------------------
signal和slot实现了信号传递和简单的数据传递,数据传递一般使用参数,我个人不把signal理解成一个函数,可能只是起到一个函数签名的作用,运行时只是起到一个标记作用发出一个信号,只要能与对应slot呼应就可以了。