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

What is the correct way to "stop / shutdown" a QNetworkAccessManager?

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

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

我可以随时关闭 QNetworkAccessManager 吗?我问是因为我在挂起的获取请求期间销毁我的对象 m_networkManager 时看到 write access violation

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

根本原因是我们的QNetworkAccessManager用在了threaded worker(1)中。所以很明显,当 QNetworkAccessManager 被删除,并且在这一步(并且只有在那时)清理未决的 QNetworkReply 对象时,问题就出现了。

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

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