我有一个QNetworkAccessManager
。假设我有一个挂起的请求:
QNetworkRequest request(url);
this->m_networkManager->get(request)
我可以随时关闭QNetworkAccessManager
吗?我之所以这么问,是因为在挂起的get请求中销毁对象m_networkManager
时,我看到了一个write access violation
。
或者,我如何安全地销毁管理器,似乎没有停止或关闭功能。
根本原因是我们的QNetworkAccessManager
用于线程工作线程(1)。因此,很明显,当QNetworkAccessManager
被删除,并且在这个步骤中(并且只有在这个步骤)清理挂起的QNetworkReply
对象时,问题就出现了。
分析:没有挂起的回复,或者在主线程中使用时,在相同的场景中没有问题。如果QNetworkAccessManager
在移回主线程之前被删除,则可以避免此问题。结论(或推测):当QNetworkAccessManager
试图删除在不同线程中创建的QNetworkReply
时,就会出现问题。
(1) 可以理解的是,请求是异步执行的——我们有充分的设计理由来设计线程化工作程序。