【问题标题】:Does the QNetworkAccessManager destructor abort the current requests?QNetworkAccessManager 析构函数是否中止当前请求?
【发布时间】:2012-04-27 01:19:30
【问题描述】:

在用户应该能够取消所有上传的应用程序上工作。现在我想知道我是否必须追查 QNAM 的所有回复,或者只是删除它并期望它们都中止?

文档中没有任何关于中止的说明,但我假设它会。

销毁 QNetworkAccessManager 对象并释放所有资源。请注意,从此类返回的 QNetworkReply 对象将此对象设置为它们的父对象,这意味着如果您不对它们调用 QObject::setParent(),它们将与它一起被删除。

编辑: 最终为每个回复使用了一个包装器(它也拥有它的所有权并重试等),它在其析构函数中既断开 QNetworkReplys 信号又中止它。它与包装器(父->子)一起被删除

【问题讨论】:

    标签: c++ qt qnetworkaccessmanager


    【解决方案1】:

    它只会删除回复。来源:

    QNetworkAccessManager::~QNetworkAccessManager()
    {
        // ...
    
        qDeleteAll(findChildren<QNetworkReply *>());
    
        // ...
    }
    

    并且QNetworkReply的析构函数是空的,所以需要手动中止它们。

    【讨论】:

    • 是的,我完全知道,因此在文档中说明了这一点。但我更想知道在删除 QNAM 之前是否必须 abort() 所有回复(取消所有上传)?
    • @chikuba 在调用abort()的QNetworkReply析构函数的源代码中没有任何内容。
    • @chikuba - 好吧,是的,否则你将拥有并尝试使用不再有效的指针。你好未定义的行为。
    • 那么,当我删除时,正在运行的请求会发生什么?
    • @chikuba 那我不知道...测试一下看看?
    猜你喜欢
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多