2

我有一个QNetworkAccessManager. 假设我有一个待处理的请求:

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

我可以QNetworkAccessManager随时关闭吗?我之所以问,是因为我在挂起的获取请求期间write access violation破坏了我的对象时看到了一个。m_networkManager

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

4

1 回答 1

2

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

分析:在没有待回复的情况下,或者在主线程中使用时,相同场景下没有问题。QNetworkAccessManager如果在将其移回主线程之前将其删除,则可以避免该问题。结论(或推测):当QNetworkAccessManager尝试删除QNetworkReply在不同线程中创建的内容时会出现问题。

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

于 2015-11-26T01:53:36.263 回答