を扱う場合、タイマーを使用して接続を中止する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 つは、リクエストのキューを実装し、処理できる接続を最大にすることですが、よりクリーンな解決策を探しています