4
當處理QNetworkReply
時,使用定時器中止連接是prescribed。處理Qt中的網絡超時
這裏是我當前的代碼:
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
的請求,但由於存在throttling for maximum concurrent connections,有時甚至在處理之前,有些請求會超時。
是否有一個信號來準確知道何時由QNeworkAccessManager
開始處理請求,以便我只能啓動相應的計時器?
一個可能的解決方案可能是實現請求的隊列,並有只有最大可能的連接來處理,但我要尋找一個清潔解決方案
瞭解了這個bug。第三年通過了這樣一個基本功能:我對此抱怨很大。這表明我應該實施一個補丁併發布它.. – quetzalcoatl 2012-10-09 16:39:13