Возможно ли создавать воркер прямо уже в созданном и qthread или я хочу слишком многого?
Например сейчас создаю поток и рабочий объект в нем так:
m_eThread = new QThread();
m_eWorker = new Extractor();
m_eWorker->moveToThread(m_eThread);
connect(m_eWorker, &Extractor::errorString, this, &U::errorString);
connect(m_eWorker, &Extractor::extractionFinished, m_eThread, &QThread::quit);
connect(m_eWorker, &Extractor::extractionFinished, m_eWorker, &Extractor::deleteLater);
connect(m_eThread, &QThread::finished, m_eThread, &QThread::deleteLater);
connect(m_eWorker, &Extractor::initialized, m_eWorker, &Extractor::extract);
connect(m_eThread, &QThread::started, m_eWorker, [this, fileName, destDir]() {
QMetaObject::invokeMethod(m_eWorker, [this, fileName, destDir]() { m_eWorker->initialize(fileName, destDir); });
});
m_eThread->start();
m_eThread->setPriority(QThread::LowPriority);
Наркоманская магия (не уверен что последний connect правильно написан) в двух последних connect нужна чтобы Extractor создавал свои обьекты уже будучи перемещенным в m_eThread.
Выделение всего в конструкторе Extractor же приведет что moveToThread сломает, например, QNetworkAccessManager.
Напичкав код qDebug() << __FUNCTION__ << thread();
можно увидить:
U::createExtractionThread QThread(0x229d1b66cf0)
Extractor::Extractor QThread(0x229d1b66cf0)
Extractor::initialize QThread(0x229d5552870)
Extractor::extract QThread(0x229d5552870)
Extractor::extractDir QThread(0x229d5552870)
Extractor::extractFile QThread(0x229d5552870)