4

在处理 时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以便我只能在那时启动相应的计时器?

一种可能的解决方案可能是实现一个请求队列,并且只有最大可能的连接来处理,但我正在寻找一个更清洁的解决方案

4

1 回答 1

5

该问题有一个未解决的错误/增强请求我从Qt 论坛了解了这个错误

于 2012-08-21T08:52:56.940 回答