Qtimer在QNetworkAccessManager完成之前触发

时间:2012-11-20 22:08:14

标签: c++ qt 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是否已完成?

2 个答案:

答案 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()));