У меня есть один QNetworkAccessManager для обработки всех моих запросов. Менеджер может получить действие для отправки почтового запроса в любое время, когда приложение запущено. Я заметил, что время ожидания QNetworkReply составляет почти 70 секунд, когда нет inte rnet.
В конструкторе класса я создаю менеджер с помощью:
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*)));
Я удаляю репутацию QNetworkReply в методе requestFinished с помощью rep->deleteLater();
.
При этом я ожидаю, что все QNetworkReply будут удалены автоматически.
В десктрукторе класса запускаю
delete mngr
мои мысли: 0:00 Отправляю запрос. 0:01 Я удаляю mngr (который автоматически удаляет завершенный слот) 1:10 запрос завершается, слота больше нет, поэтому deleteLater () не вызывается.
Каков правильный способ чтобы удалить «QNetworkAccessManager», возможно, мое приложение отправляет запрос каждые 60 секунд с таймаутом на 70 секунд (то есть всегда есть текущий запрос). Как удалить qnetworkmanager без утечки памяти?