【发布时间】:2013-12-29 06:51:39
【问题描述】:
哪个更合适:QThread 还是 QFuture ? 我正在尝试在 QThread 中传递 QNetWorkAccessManager,但这会导致父线程和子线程出错:/
QObject:无法为不同线程中的父级创建子级。 (Parent是QNetworkAccessManager(0xc996cf8),parent的线程是QThread(0xaba48d8),当前线程是Citizen(0xca7ae08)
m_networkManger = new QNetworkAccessManager(this);
m_thread = new QThread();
m_data = new LoadData(m_labelsList, m_parserType, argUrl, m_networkManger);
m_data->moveToThread(m_thread);
connect(m_thread, SIGNAL(started()), m_data, SLOT(process()));
connect(m_thread, SIGNAL(finished()), m_thread, SLOT(deleteLater()));
m_thread->start();
使用QFuture可以解决问题吗?
【问题讨论】:
-
要实现的重要细节:
QThread是线程控制器,它必须具有与其控制的线程不同的线程亲和性。子QObject必须与其父QObject具有相同的线程亲缘关系。 -
你也必须在网络管理器上做 moveToThread