首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

子线程中信号返回值的有关问题

2012-06-15 
子线程中信号返回值的问题最近发现一个现象:1. 一个继承于QThread的MyThread中,有一个信号int Sig(),一个

子线程中信号返回值的问题
最近发现一个现象:
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()这句话执行完成的时候,槽其实并还没有执行。
[解决办法]

探讨

信号与槽不在一个线程中时,信号会发送到队列中去,也就是说槽与信号是异步的过程。所以当你int n = emit Sig()这句话执行完成的时候,槽其实并还没有执行。

[解决办法]
探讨
引用:

信号与槽不在一个线程中时,信号会发送到队列中去,也就是说槽与信号是异步的过程。所以当你int n = emit Sig()这句话执行完成的时候,槽其实并还没有执行。

+1,请确保你的connect最后一个参数是Qt::DirectConnection

另外,这种写法不太好,信号和槽一般是没有返回值的。你这样写和你直接调用int Slot()有啥区别呢?

[解决办法]
Qt里emit信号就是调用信号的函数,仅此而已
信号的类型应该是void的
[解决办法]
signal和slot实现了信号传递和简单的数据传递,数据传递一般使用参数,我个人不把signal理解成一个函数,可能只是起到一个函数签名的作用,运行时只是起到一个标记作用发出一个信号,只要能与对应slot呼应就可以了。

热点排行