我有QNetworkAccessManager
。我们假设我有待处理的请求:
QNetworkRequest request(url);
this->m_networkManager->get(request)
我可以随时关闭QNetworkAccessManager
吗?我问,因为在待处理的请求请求期间我破坏对象write access violation
时,我看到m_networkManager
。
或者我如何安全地销毁管理器,似乎没有停止或关闭功能。
答案 0 :(得分:2)
根本原因是我们的QNetworkAccessManager
用于线程工作者(1)。很明显,当删除QNetworkAccessManager
时,在此步骤中(并且仅在此时)清除待处理的QNetworkReply
对象,就会出现问题。
分析:
如果没有待处理的回复,或者在主线程中使用,则在同一方案中没有问题。如果在将QNetworkAccessManager
移回主线程之前删除QNetworkAccessManager
,则可以避免此问题。结论(或推测):QNetworkReply
尝试删除在其他线程中创建的btn1.setTag(1);
btn2.setTag(2);
...
时会出现此问题。
(1)据了解,请求是异步执行的 - 我们对线程工作者有很好的设计理由。