QNetworkAccessManager Утечка памяти

У меня возникли проблемы с утечками памяти при использовании QNetworkAccessManager (с использованием Qt). Чем больше запросов я вызываю, тем больше памяти выделяется. Это имеет смысл, но не для меня так, как я это делаю. Я звоню, скажем, на 16 запросов, а затем, как только 16 раз сетевой ответ получен, я вызываю следующие 16. С этим методом не будет ли это нормально регулировать память? По какой-то причине это не так, и память неуклонно увеличивается, так как больше называются. Может ли это повлиять на это?

Заголовок:

#include <QThread>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QSemaphore>
#include <QPixmap>
#include <QMutex>
#include <QDebug>

#include "winnames.h"
#define MAX_REQUEST_COUNT 16

class Downloader : public QThread
{
Q_OBJECT
public:
explicit Downloader(QObject *parent = 0);
void start(Priority = InheritPriority);

signals:
void PictureDownloaded(QPixmap picture, QString id);

public slots:
void networkReply(QNetworkReply*);

private:
void startDownloads();

QString titleID;
QNetworkAccessManager *manager;

int amount;
};

CPP:

#include "downloader.h"
Downloader::Downloader(QObject *parent) : QThread(parent)
{
manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(networkReply(QNetworkReply*)));
}
void Downloader::start(Priority p)
{
amount = 0;
titleID = "50";
startDownloads();
}

void Downloader::startDownloads()
{
const int searchValues[] = {0, 0x400, 0x1000, 0x8000, 0xFFFF};
for (int x = 0; x < 4; x++)
{
int num = searchValues[x] + amount;
if (num >= searchValues[x + 1])
continue;

for (int i = 0; i < MAX_REQUEST_COUNT; i++)
manager->get(QNetworkRequest(QUrl("http://my.url/" + titleID.toUpper() + "/someDir/" + QString("%1").arg(num + i, 4, 16, QChar('0')).toUpper())));
}
}

void Downloader::networkReply(QNetworkReply *reply)
{
if (reply->bytesAvailable() != 0)
{
QPixmap pixmap;
pixmap.loadFromData(reply->readAll(), "PNG");
if (!pixmap.isNull())
emit PictureDownloaded(pixmap, titleID + reply->url().toString().mid(reply->url().toString().length() - 4));
}
reply->deleteLater();
reply->close();

QMutex m;
m.lock();

if (amount++ != 0 && amount % MAX_REQUEST_COUNT == 0)
startDownloads();

m.unlock();
}

Любая идея? Спасибо!

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]