当处理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
这样我就可以启动相应的计时器才?
一个可能的解决方案可能是实现请求的队列,并有只有最大可能的连接来处理,但我正在寻找一个清洁的解决方案