我有一個3個QThreads通過相互調用(全部來自QThread的繼承。我知道有些人可能會建議使用moveToThread,但恰恰忽略了這一事實現在)。簡化代碼看起來如下:無法與成品()信號之間的QThread連接多個QThread的
線程1類:
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; }
線程2類:
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()信號。線程2中的onFinished()已被調用。我很確定thread3的執行已經完成。
誰能告訴我哪裏能有什麼錯呢?所有的
我在您發佈的代碼部分沒有看到任何錯誤。嘗試使用'qDebug()'來查明'connect'是否返回true,並且實際調用了'onFinished()'槽。 –
@TimMeyer,我在onFinished()上打印出來了,但是沒有打印出來。基本上程序一直卡在thread2的while循環中。但我很確定thread3已經完成了,因爲我在run()方法的末尾也有一個調試打印輸出。 –