处理网络超时Qt中(Handling network timeout in Qt)

2019-07-31 01:14发布

当处理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个并发获取请求QNetworkAccessManager但因为有节流的最大并发连接 ,有时它发生,一些请求得到超时,他们都已经被处理甚至之前。

有没有办法确切地知道该请求的处理被启动的信号QNeworkAccessManager这样我就可以启动相应的计时器才?

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

Answer 1:

这里是一个开放的bug /增强请求的问题。 我知道从这个错误的Qt论坛



文章来源: Handling network timeout in Qt