И это всё МОЁ

Возможно ли создавать воркер прямо уже в созданном и 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);

m_eThread->start();
m_eThread->setPriority(QThread::LowPriority);

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); });
});


Наркоманская магия (не уверен что последний 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)









 ,