0

我正在开发一个应用程序来跟踪在线 Xbox Live、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 回答