Qt 4 GUI应用程序GUI线程因QNetworkRequests而变慢

时间:2012-10-12 04:11:44

标签: multithreading user-interface qt4

我正在开发一个跟踪在线Xbox Live,PSN和Steam朋友的应用程序。应用程序使用QNetworkAccessManager执行一系列QNetworkRequests。 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是多线程的,还是应该将它们移到单独的线程中?

1 个答案:

答案 0 :(得分:2)

QNetworkAccessManager在其实现中没有线程化。它是异步的,并使用事件循环。

那些声称出于性能原因需要在线程状态下使用它的人已经注意到他们需要在线程中专门创建实例,而不是尝试将其移动到线程中。这是link to someone posting an example of such

在单独的线程中创建它之前,首先要确保您没有执行任何可能导致主线程变慢的阻塞操作。