Я устанавливаю связь каждые 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, прежде чем таймер снова срабатывает?
Не создавайте сетевого менеджера для каждого запроса, а только одного сетевого менеджера для вашего класса. В противном случае вы будете пропускать менеджеров с каждым запросом, пока главное окно не будет уничтожено.
QNetworkManager :: get возвращает указатель на QNetworkReply представляющий запрос. Вы можете сохранить этот ответ в QPointer, подключиться к его сигналам, проверить QNetworkReply :: isFinished () и т. Д., Чтобы отследить, выполняется ли еще запрос или нет.
Почему бы просто не запустить таймер после завершения запроса?
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()));