2012-08-17 58 views
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開始處理請求,以便我只能啓動相應的計時器?

一個可能的解決方案可能是實現請求的隊列,並有只有最大可能的連接來處理,但我要尋找一個清潔解決方案

回答

5

有一個開放的bug/enhancement request的問題。我從Qt forum

+4

瞭解了這個bug。第三年通過了這樣一個基本功能:我對此抱怨很大。這表明我應該實施一個補丁併發布它.. – quetzalcoatl 2012-10-09 16:39:13