0

Qt에서 QNetworkAccessManager 개체를 만든 후에 다른 응용 프로그램 (멀티 플레이어 게임과 같이 네트워크를 많이 사용하는 응용 프로그램)이 느리게 실행됩니다.(Qt) QNetworkAccessManager가 다른 응용 프로그램의 속도를 느리게합니다.

예를 들어 내 앱을 배경으로 실행하는 동안 Dota2를 실행하면 내 Qt 앱이 매우 밝을지라도 게임이 지연되기 시작합니다 (프로세스 탐색기를 통해 확인한 결과 1 % 미만의 CPU 사용량 만 소비합니다)). QNetworkAccessManager 부분을 코드에서 제거하면 지연없이 게임이 원활하게 실행됩니다.

다음은 QNetworkAccessManager를 사용하는 방법입니다.

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

그리고 parse_response()에서

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

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

재미있는 것은 내가 프로세스 탐색기를 통해 내 애플 리케이션의/O 사용량 I을 확인할 때, 그것은 I/O 사용에 이상한 활동을 보여주고 있다는 점이다

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

QNetworkAccessManager를 사용하지 않을 때 이상한 I/O 사용이 사라집니다. 그러므로 나는 내 qnam이 성공적으로 삭제되지 않았지만 내 코드에서 어떤 문제도 찾을 수 없다고 가정합니다.

이 문제와 비슷한 경험이있는 사람이 있습니까? QNetworkAccessManager의 사용법이 잘못 구성 되었습니까?

+0

QNetworkAccessManager 자체는 컴퓨터 부하에 문제를 일으키지 않을 것입니다. 'QNetworkAccessManager'가 정확히 무엇을하고 있는지 그리고 얼마나 자주 사용되는지 조사해야합니다. – hank

+0

아니요. 모든 코드를 제거하고 QNetworkAccessManager 개체를 만들었을 때 동일한 결과가 나타났습니다. – Jaebum

답변

2

QNetworkAccessManager 내의 버그라는 것을 알게되었습니다.

무선 환경에서 QNetworkAccessManager는 몇 초마다 wifi 상태를 검색합니다. 그 작은 스파이크가 그 증거였습니다. 다음 버그 보고서를 확인하십시오.

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

이 문제를 해결하거나

-D QT_NO_BEARERMANAGEMENT 

옵션을 사용하여 컴파일하거나 플러그인에 베어러 폴더를 제거합니다.

관련 문제