Qtimer срабатывает до завершения QNetworkAccessManager

Я устанавливаю связь каждые X сек. но в случае, если пропускная способность сети перегружена, таймер срабатывает до того, как QNetworkAccessManager отправит законченный сигнал и приложение завершит работу.

MainWindow :: конструкт:

pTimer = new QTimer(this);
connect(pTimer, SIGNAL(timeout()), this, SLOT(connect()));
pTimer->start(5000);

MainWindow :: подключения ()

pNetworkManager = new QNetworkAccessManager(this);
connect(pNetworkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(result(QNetworkReply*)));
pNetworkManager->get(QNetworkRequest(url));

MainWindow :: result (QNetworkReply * reply) обрабатывает ответ

Как проверить, если QNetworkAccessManager isFinished, прежде чем таймер снова срабатывает?

0

Решение

Не создавайте сетевого менеджера для каждого запроса, а только одного сетевого менеджера для вашего класса. В противном случае вы будете пропускать менеджеров с каждым запросом, пока главное окно не будет уничтожено.

QNetworkManager :: get возвращает указатель на QNetworkReply представляющий запрос. Вы можете сохранить этот ответ в QPointer, подключиться к его сигналам, проверить QNetworkReply :: isFinished () и т. Д., Чтобы отследить, выполняется ли еще запрос или нет.

3

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

Почему бы просто не запустить таймер после завершения запроса?

pTimer = new QTimer(this);
pTimer->setSingleshot(true);
connect(pTimer, SIGNAL(timeout()), this, SLOT(connect()));
pTimer->start(5000);

pNetworkManager = new QNetworkAccessManager(this);
connect(pNetworkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(result(QNetworkReply*)));
connect(pNetworkManager, SIGNAL(finished(QNetworkReply*)), pTimer, SLOT(start()));
1

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