"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) 据了解,请求是异步执行的——我们对线程工作者有很好的设计理由。
我有一个 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) 据了解,请求是异步执行的——我们对线程工作者有很好的设计理由。