QObject: Невозможно создать дочерние элементы для родителя, который находится в другом потоке, с помощью QtConcurrent :: run

Я пытаюсь использовать поток в QT, но я получаю странную ошибку в кодах, которые я использовал.

Функцией я пользуюсь потоками.

QThreadPool::globalInstance()->setMaxThreadCount(size);
QFutureSynchronizer<void> synchronizer;

for(quint64 i=0;i<size;i++)
{
synchronizer.addFuture(QtConcurrent::run(this, &Market::tickerForThread,markets[permission[i]],QString("%1%2/value").arg(url).arg(permission[i])));
}
synchronizer.waitForFinished();

и функции

void Market::tickerForThread(QVariantMap &vMap,QString url)
{
vMap=QJsonDocument::fromJson(getnetwork->getAction(url)).object().value("value").toObject().toVariantMap();
}

QByteArray GetNetwork::getAction(QString url)
{
QEventLoop loop;
QNetworkReply *reply=getNAM->get(QNetworkRequest(QUrl(url)));
connect(reply,SIGNAL(finished()),&loop,SLOT(quit()));
loop.exec();

if(reply->error()!=QNetworkReply::NoError)
{
QString error=QString("Network Error file:%1 line:%2 error:%3")
.arg(__FILE__)
.arg(__LINE__)
.arg(reply->errorString());

emit errorOccured(error);

return error.toLatin1();
}

return reply->readAll();
}

и ошибка, которую я получил

QObject: Cannot create children for a parent that is in a different thread.
(Parent is QNetworkAccessManager(0xa64d80), parent's thread is QThread(0x6f9270), current thread is QThread(0xad4490)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QNetworkAccessManager(0xa64d80), parent's thread is QThread(0x6f9270), current thread is QThread(0xacc3c0)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QNetworkAccessManager(0xa64d80), parent's thread is QThread(0x6f9270), current thread is QThread(0xacbd90)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QNetworkAccessManager(0xa64d80), parent's thread is QThread(0x6f9270), current thread is QThread(0xad4b20)

В чем причина ошибки и как ее можно устранить?
Спасибо за ваши ответы.

3

Решение

В чем причина ошибки и как ее можно устранить?

Родители и дети должны жить в одной теме. Решение состоит в том, чтобы переместить их в один поток соответственно.

Вам нужно будет либо перенести экземпляр QNAM в ветку детей, либо нужно будет переместить детей. Я не мог бы дать вам более конкретный совет, чем этот, без дальнейшего разъяснения контекста.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]