什么是"停止/关闭"的正确方法。一个QNetworkAccessManager?

时间:2015-11-25 00:04:34

标签: qt access-violation qnetworkaccessmanager qt5.5

我有QNetworkAccessManager。我们假设我有待处理的请求:

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

我可以随时关闭QNetworkAccessManager吗?我问,因为在待处理的请求请求期间我破坏对象write access violation时,我看到m_networkManager

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

1 个答案:

答案 0 :(得分:2)

根本原因是我们的QNetworkAccessManager用于线程工作者(1)。很明显,当删除QNetworkAccessManager时,在此步骤中(并且仅在此时)清除待处理的QNetworkReply对象,就会出现问题。

分析: 如果没有待处理的回复,或者在主线程中使用,则在同一方案中没有问题。如果在将QNetworkAccessManager移回主线程之前删除QNetworkAccessManager,则可以避免此问题。结论(或推测):QNetworkReply尝试删除在其他线程中创建的btn1.setTag(1); btn2.setTag(2); ... 时会出现此问题。

(1)据了解,请求是异步执行的 - 我们对线程工作者有很好的设计理由。