У меня есть 3 QThreads, вызывающих друг друга (все унаследованы от QThread. Я знаю, что некоторые могут предлагать использовать moveToThread, но просто игнорировать этот факт пока). Упрощенный код выглядит следующим образом:Невозможно подключиться между QThread с завершенным() сигналом для нескольких Qthread
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() кажется, что соединение с готовым() сигналом больше не подходит, после того как я перешел к сценарию с тремя потоками. OnFinished() в thread2 когда-либо был вызван. И я уверен, что выполнение потока3 завершено.
Может ли кто-нибудь сказать мне, где я мог бы сделать неправильно?
Я не вижу ошибок в части кода, который вы опубликовали. Попробуйте использовать 'qDebug()', чтобы узнать, возвращает ли 'connect' true и если на самом деле вызывается' onFinished() 'слоты. –
@TimMeyer, у меня была распечатка на onFinished(), но ничего не было распечатано. В основном программа застревает в цикле while в thread2. Но я уверен, что thread3 закончил, потому что у меня также есть отладочная распечатка в конце метода run(). –