我每隔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是否已完成?
答案 0 :(得分:3)
不要为每个请求创建网络管理员,而只为您的班级创建一个网络管理员。否则,您会在每个请求中泄漏管理器,直到主窗口被销毁。
QNetworkManager :: get返回指向请求的QNetworkReply的指针。您可以将该回复存储在QPointer中,连接到其信号,检查QNetworkReply :: isFinished()等以跟踪请求是否仍在运行。
答案 1 :(得分:1)
为什么不在请求完成后立即启动计时器?
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()));