Я хочу сделать условие в коде, чтобы дождаться завершения всех потоков в последнем слоте основного потока, ниже приведен тестовый код..
testClass::testClass()
{
m_count = 0;
m_flag = false;
for( int i = 0; i < 3; i++)
{
QThread *thread = new QThread();
WorkerThread *worker = new WorkerThread();
connect(thread, SIGNAL(started()), worker, SLOT(startThread()));
connect(worker, SIGNAL(workerFinished()), this, SLOT(threadFinished()));
connect(worker, SIGNAL(workerFinished()), thread, SLOT(quit()));
connect(thread, SIGNAL(finished()), worker, SLOT(deleteLater()));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
m_workerList.append(worker);
}
}
void testClass::threadFinished()
{
// wait untill all thread are finished, how to achive this ?
if(!m_flag)
{
// print << m_flag;
m_flag = true;
}
}
void WorkerThread::startThread()
{
emit workerFinished();
}
здесь testClass находится в основном потоке, и я хочу, чтобы приложение ждало в слоте threadFinished, пока все потоки, которые я начал в конструкторе testClass, не закончатся, может ли кто-нибудь предложить лучший способ сделать это?
Я использую Qt 5.4.0 в Windows 7.
wait()
во всех темах? - person John Zwinck   schedule 12.01.2015