"stop / shutdown" QNetworkAccessManager的正确方法是什么?



我有一个QNetworkAccessManager。假设我有一个挂起的请求:

QNetworkRequest request(url);
this->m_networkManager->get(request)

我可以随时关闭QNetworkAccessManager吗?我之所以这么问,是因为在挂起的get请求中销毁对象m_networkManager时,我看到了一个write access violation

或者,我如何安全地销毁管理器,似乎没有停止或关闭功能。

根本原因是我们的QNetworkAccessManager用于线程工作线程(1)。因此,很明显,当QNetworkAccessManager被删除,并且在这个步骤中(并且只有在这个步骤)清理挂起的QNetworkReply对象时,问题就出现了。

分析:没有挂起的回复,或者在主线程中使用时,在相同的场景中没有问题。如果QNetworkAccessManager在移回主线程之前被删除,则可以避免此问题。结论(或推测):当QNetworkAccessManager试图删除在不同线程中创建的QNetworkReply时,就会出现问题。

(1) 可以理解的是,请求是异步执行的——我们有充分的设计理由来设计线程化工作程序。

相关内容

最新更新