QNetworkAccessManager 在添加请求时稍后删除
QNetworkAccessManager delete later while requests are added
我有一个 QNetworkAccessManager 来处理我所有的请求。
管理器可以在应用程序 运行ning 的任何时候接收发送 post 请求的操作。
我注意到在没有互联网时 QNetworkReply 完成之前几乎有 70 秒的超时时间。
在 class 的构造函数中,我创建了管理器:
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();
.
删除了 requestFinished 方法中的 QNetworkReply 代表
有了这个,我希望所有 QNetworkReply 都被自动删除。
在 class I 运行
的析构函数中
delete mngr
我的想法:
0:00 我发送一个请求。
0:01 我删除了 mngr(它会自动删除 onfinished 插槽)
1:10 请求完成,不再有插槽,因此不会调用 deleteLater()。
删除 'QNetworkAccessManager' 的正确方法是什么?我的应用程序可能每 60 秒发送一个请求,超时时间为 70 秒(意味着始终有一个正在进行的请求)。如何在不造成内存泄漏的情况下删除 qnetworkmanager?
connect(mgr, &QNetworkAccessManager::destroyed, reply, &QNetworkReply::deleteLater);
QObjects 提供 destroyed()
信号。因此,您可以将您的经理 destroyed()
与公开回复 deleteLater()
联系起来。当您的经理被销毁时,所有打开的回复都将被删除。如果回复结束时管理器仍然存在,您可以像您已经做的那样显式调用 deleteLater()
,这将防止回复在您销毁管理器之前一直存在。
我有一个 QNetworkAccessManager 来处理我所有的请求。 管理器可以在应用程序 运行ning 的任何时候接收发送 post 请求的操作。 我注意到在没有互联网时 QNetworkReply 完成之前几乎有 70 秒的超时时间。
在 class 的构造函数中,我创建了管理器:
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();
.
有了这个,我希望所有 QNetworkReply 都被自动删除。
在 class I 运行
的析构函数中delete mngr
我的想法: 0:00 我发送一个请求。 0:01 我删除了 mngr(它会自动删除 onfinished 插槽) 1:10 请求完成,不再有插槽,因此不会调用 deleteLater()。
删除 'QNetworkAccessManager' 的正确方法是什么?我的应用程序可能每 60 秒发送一个请求,超时时间为 70 秒(意味着始终有一个正在进行的请求)。如何在不造成内存泄漏的情况下删除 qnetworkmanager?
connect(mgr, &QNetworkAccessManager::destroyed, reply, &QNetworkReply::deleteLater);
QObjects 提供 destroyed()
信号。因此,您可以将您的经理 destroyed()
与公开回复 deleteLater()
联系起来。当您的经理被销毁时,所有打开的回复都将被删除。如果回复结束时管理器仍然存在,您可以像您已经做的那样显式调用 deleteLater()
,这将防止回复在您销毁管理器之前一直存在。