【发布时间】:2013-10-15 14:34:36
【问题描述】:
我有 3 个 QThreads 相互调用(全部继承自 QThread。我知道有些人可能会建议使用 moveToThread,但暂时忽略这个事实)。简化代码如下所示:
Thread1 类:
void
Thread1::run
{
// some execution
Thread2 t2 = new Thread2();
connect(t2,SIGNAL(finished),this,SLOT(onFinished));
t2->start();
while(!stop) // stop was initialized as false
{
this->msleep(10);
}
}
void Thread1::onFinished(){ stop = true; }
Thread2 类:
void
Thread2::run
{
// some execution
Thread3 t3 = new Thread3();
connect(t3,SIGNAL(finished),this,SLOT(onFinished));
t3->start();
while(!stop) // stop was initialized as false
{
this->msleep(10);
}
}
void Thread2::onFinished(){ stop = true; }
Thread3 类:
void
Thread3::run
{
// some execution
QMutexLocker ml(&mMutex);
}
当我只有两个线程时,它工作得非常好(例如只有 thread2 和 thread3)。在我转移到三线程场景之后,onFinished() 方法似乎不再与 finished() 信号正确连接。 thread2 中的 onFinished() 曾经被调用过。而且我很确定thread3的执行已经完成。
谁能告诉我哪里做错了?
【问题讨论】:
-
我在您发布的部分代码中看不到任何错误。尝试使用
qDebug()来确定@987654325@ 是否返回true,以及onFinished()插槽是否被实际调用。 -
@TimMeyer,我确实在 onFinished() 处打印了出来,但什么都没有打印出来。基本上程序一直卡在thread2的while循环中。但我很确定 thread3 已经完成,因为我在 run() 方法的末尾还有一个调试打印输出。
标签: c++ multithreading qt qthread