在处理 时QNetworkReply
,规定使用计时器来中止连接。
这是我当前的代码:
void ImageDownloader::download(QString imgUrl){
this->timeoutTimer = new QTimer(this);
this->timeoutTimer->setSingleShot(true);
this->timeoutTimer->setInterval(15000);
connect(this->timeoutTimer, SIGNAL(timeout()), this, SLOT(timeout()));
QUrl requestUrl(imgUrl);
QNetworkRequest nwRequest(requestUrl);
this->imageNwReply = this->nam->get(nwRequest);
connect(imageNwReply,SIGNAL(finished()),this,SLOT(imgDownloaded()));
connect(imageNwReply, SIGNAL(downloadProgress(qint64,qint64)), this->timeoutTimer, SLOT(start()));
this->timeoutTimer->start();
}
void ImageDownloader::timeout(){
qDebug()<<__FUNCTION__<<" Forced timeout!";
this->imageNwReply->abort();
}
我面临的困惑是我应该什么时候启动计时器?有时我必须发出大约 50 个并发Get请求,QNetworkAccessManager
但由于限制了最大并发连接数,有时甚至在处理它们之前,某些请求就会超时。
是否有信号可以准确知道何时开始处理请求,QNeworkAccessManager
以便我只能在那时启动相应的计时器?
一种可能的解决方案可能是实现一个请求队列,并且只有最大可能的连接来处理,但我正在寻找一个更清洁的解决方案