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その時だけ対応するタイマーを開始できるように、リクエストの処理がいつ開始されるかを正確に知るためのシグナルはありますか?

考えられる解決策の 1 つは、リクエストのキューを実装し、処理できる接続を最大にすることですが、よりクリーンな解決策を探しています

4

1 に答える 1

5

この問題について未解決のバグ/機能強化リクエストがあります。Qtフォーラムからこのバグについて知りました

于 2012-08-21T08:52:56.940 に答える