(Qt)QNetworkAccessManager减慢了其他应用程序

时间:2016-08-03 15:58:09

标签: c++ qt networking memory-management qnetworkaccessmanager

似乎在我在Qt中创建QNetworkAccessManager对象后,它使其他应用程序(那些大量使用网络的应用程序,如多人游戏)运行缓慢。

例如,如果我在运行我的应用程序作为背景时运行Dota2,即使我的Qt应用程序非常轻,游戏也会开始滞后(我通过进程资源管理器进行检查,它的整个CPU使用率仅为1%) 。如果我从代码中删除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();
}

有趣的是,当我通过进程资源管理器检查我的应用程序的I / O使用情况时,它会显示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的使用配置不正确?

1 个答案:

答案 0 :(得分:2)

我发现这是QNetworkAccessManager中的一个错误。

在无线环境中,QNetworkAccessManager每隔几秒扫描一次wifi状态。那些小峰值就是证据。请检查以下错误报告。

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

要解决此问题,请使用

进行编译
-D QT_NO_BEARERMANAGEMENT 

选项或只删除插件中的bearer文件夹。