2016-08-03 24 views
0

Es scheint, nachdem ich ein QNetworkAccessManager-Objekt in Qt erstellt habe, macht es andere Anwendungen (diejenigen, die Netzwerk stark, wie Multiplayer-Spiel) langsam laufen.(Qt) QNetworkAccessManager verlangsamt andere Anwendung

Zum Beispiel, wenn ich Dota2 während der Ausführung meiner App als Hintergrund ausgeführt habe, beginnt das Spiel zu verzögern, auch wenn meine Qt-App sehr leicht ist (Ich habe den Process Explorer überprüft und verbraucht nur ganze 1% der CPU-Auslastung). Wenn ich den QNetworkAccessManager-Teil aus dem Code entferne, läuft das Spiel reibungslos und ohne Verzögerung.

So verwende ich QNetworkAccessManager;

QNetworkAccessManager *qnam = new QNetworkAccessManager(this); 
response = qnam->get(QNetworkRequest(url)); 
connect(response , &QNetworkReply::finished, this, &Test::parse_response); 

Und in parse_response()

void parse_response() { 
     // Network Error occured 
     if (response->error() != QNetworkReply::NoError) { 
      response->deleteLater(); 
      return; 
     } 

     response->deleteLater(); 
     qnam->deleteLater(); 
} 

Komische ist, dass, wenn ich überprüfe ich/O-Nutzung meiner app durch Process Explorer, es seltsam Aktivität auf I/O-Nutzung

zeigt I/O usage (marked as 'Other'). Those purple spikes are the one when I actually made HTTP request. Rest of the small spikes are unknown ones. By the way, the weird I/O constantly requests 12.8KB

Wenn ich QNetworkAccessManager nicht verwendet habe, verschwindet diese seltsame E/A-Verwendung. Daher nehme ich an, dass mein qnam nicht erfolgreich gelöscht wurde, aber in meinem Code kein Problem gefunden wurde.

Wenn jemand ähnliche Erfahrungen mit diesem Problem hatte? Oder ist es nur meine Konfiguration der Verwendung von QNetworkAccessManager falsch?

+0

'QNetworkAccessManager' selbst wird wahrscheinlich keine Probleme mit Ihrer Maschine laden, aber Ihre Verwendung wird es. Sie sollten untersuchen, was "QNetworkAccessManager" genau macht und wie oft es verwendet wird. – hank

+0

Nein. Wenn ich den gesamten Code entfernte und einfach das QNetworkAccessManager-Objekt erstellte, zeigte es dasselbe Ergebnis. – Jaebum

Antwort

2

Ich fand heraus, dass es ein Fehler in QNetworkAccessManager war.

In der drahtlosen Umgebung scannt QNetworkAccessManager den WLAN-Status alle paar Sekunden. Diese kleinen Stacheln waren der Beweis dafür. Überprüfen Sie den folgenden Fehlerbericht.

https://bugreports.qt.io/browse/QTBUG-40332

Um dieses Problem zu lösen, entweder kompiliert mit

-D QT_NO_BEARERMANAGEMENT 

Option oder Inhaber Ordner in einem Plugin entfernen.