QNetworkAccessManager 稍后在添加请求时删除
QNetworkAccessManager delete later while requests are added
我有一个QNetworkAccessManager来处理我的所有请求。 管理器可以在应用程序运行时接收发送发布请求的操作。 我注意到在没有互联网的情况下,QNetworkReply 完成之前几乎有 70 秒的超时时间。
在类的构造函数中,我使用以下命令创建管理器:
mgr = new QNetworkAccessManager(this);
connect(mgr,SIGNAL(finished(QNetworkReply*)),this,SLOT(requestFinished(QNetworkReply*)));
connect(mgr,SIGNAL(sslErrors(QNetworkReply *, const QList<QSslError> &)),this,SLOT(handleSSLErrors(QNetworkReply *, const QList<QSslError> &)));
创建请求时:
QNetworkReply * reply = mgr->post(request, payload);
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this,
SLOT(slotError(QNetworkReply::NetworkError)));
对于网络回复,我有一个信号槽:
connect(mgr,SIGNAL(finished(QNetworkReply*)),this,SLOT(requestFinished(QNetworkReply*)));
我用rep->deleteLater();
删除了请求完成方法中的QNetworkRep。
有了这个,我希望所有QNetworkReprat自动删除。
在我运行的类的解构器
delete mngr
我的想法: 0:00 我发送请求。 0:01 我删除了 mngr(它会自动删除已完成的插槽( 1:10 请求完成,不再有插槽,因此不调用 deleteLater((。
删除"QNetworkAccessManager"的正确方法是什么,我的应用程序可能每 60 秒发送一次超时 70 秒的请求(意味着始终有一个正在进行的请求(。如何在不产生内存泄漏的情况下删除 qnetworkmanager?
connect(mgr, &QNetworkAccessManager::destroyed, reply, &QNetworkReply::deleteLater);
QObjects提供destroyed()
信号。因此,您可以将经理destroyed()
与打开的回复deleteLater()
联系起来。当您的经理被销毁时,所有打开的回复都将被删除。如果回复结束时管理器仍然活着,您可以像已经调用的那样显式调用deleteLater()
,这将防止回复在销毁管理器之前徘徊。
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 删除指向指针的指针是运行时错误吗
- 将指针设置为"nullptr"并不能防止双重删除?
- QNetworkAccessManager 稍后在添加请求时删除
- C++ 在请求特定字节的新建后删除
- 如何使用qnetworkAccessManager发送删除请求
- 如何从QT中的http请求中删除Authorization标头
- gSOAP 在请求完成后删除对象中的引用值