0

オンラインのXboxLive、PSN、Steamの友達を追跡するアプリケーションを開発しています。アプリケーションは、QNetworkAccessManagerを使用して一連のQNetworkRequestを実行します。Xbox LiveおよびPSNコードは、QWebViewを使用してブラウザー環境をシミュレートします。リクエストは正しく実行されますが、各リクエストが終了するまでメインGUIスレッドの速度が低下します。

次にいくつかのサンプルコードを示します。

void Steam::fetchFriends(QString username)
{
    QNetworkRequest userXml("http://steamcommunity.com/id/" + username + "/friends/?xml=1");
    m_nam->get(userXml);
}

友達がダウンロードされて処理されたことをGUIに通知するシグナルを作成しました。次に、GUIで友達リストが更新されます。他のコードのいくつかはもっと複雑で、処理コードを別のスレッドに移動する必要がある可能性があります。

QNetworkAccessManagerとQNetworkRequestがマルチスレッドであること、またはそれらを別々のスレッドに移動する必要があるかどうかを誰かが確認できますか?

4

1 に答える 1

2

QNetworkAccessManagerその実装ではスレッド化されていません。これは非同期であり、イベントループを使用します。

パフォーマンス上の理由からスレッド状態で使用する必要があると主張する人は、インスタンスをスレッド内に特別に作成する必要があり、スレッドに移動しようとしない必要があると述べています。これは、そのような例を投稿している人へのリンクです。

別のスレッドで作成する前に、まず、メインスレッドの速度を低下させる可能性のあるブロッキング操作を行っていないことを確認してください。

于 2012-10-12T05:10:57.167 に答える