【发布时间】:2017-11-08 15:49:10
【问题描述】:
这是在thread A 中调用的:
void MainApplication::notify()
{
emit mySignal();
QThread::currentThread()->sleep(5);
}
在此之前发生连接和接收器创建:
// thread A
void MainApplication::init()
{
receiver->moveToThread(threadB);
connect(this,
&MainApplication::mySignal,
receiver,
&Receiver::onMySignal,
Qt::QueuedConnection);
}
预期:插槽 Receiver::onMySignal() 被 thread B 调用。
现实:在发出 thread A 睡眠时,插槽不会被调用。
P.S.:我 100% 确定thread B 的事件循环在信号发出时正在运行。
【问题讨论】:
-
我猜信号只有在控制权返回到信号线程的事件循环时才会发送,而不是直接在您调用发出时发送,因为它是一个排队连接。
-
@xander 这也是我唯一的猜测,但我找不到证明和解决方法。
-
renderManager.data()的返回值和receiver一样吗? -
您的代码看起来很奇怪。
renderManager.data()是否返回对象receiver? -
@thuga 是的,这是接收器。我复制粘贴并没有改变这一行。更新了示例。
标签: c++ multithreading qt