4

QT QNetworkAccessManager クラスを使用して、マルチスレッド C++/QT アプリケーションでいくつかのダウンロードを管理しようとしています。

ワーカースレッド(編集: スレッドは、ダウンロード以外の理由で別のものです) で、外部サーバーにアクセスして、コードで結果を受け取る準備をしたいと思います:

...
m_nam = new QNetworkAccessManager(this);
QNetworkReply *reply = m_nam->get(request);
connect(m_nam, SIGNAL(finished(QNetworkReply *)), this, 
        SIGNAL(finished(QNetworkReply *)));
...

しかし、ダウンロードが完了する前に、結果には興味がないと判断するかもしれません。

そこで、シグナル do_abort() を発行して、別のスレッドから接続を切断する方法を設定したいと思います。

それ自体が示唆するものは次のとおりです。

connect(this, SIGNAL(do_abort()), reply, SLOT(abort()));

しかし、abort は QNetworkReply のスロットではないため、うまくいかないと思います。

では、このダウンロードを別のスレッドから停止できるメカニズムを設定するにはどうすればよいでしょうか? QNetworkReply をサブクラス化し、そのクラスに適切なスロットを与えることができます。しかし、私も状況を理解したいと思います。

4

1 に答える 1

2

QNetworkAccessManager を使用するためのワーカー スレッドは必要ありません。非同期なので、メインスレッドから使​​用しても問題ありません。

QThread では、abortTheReply() スロットを実装し、その中で m_reply->abort() を実行します。次に、do_abort() シグナルを abortTheReply() に接続します。

于 2010-02-08T09:33:57.423 に答える