gpt4 book ai didi

c++ - QNetworkAccessManager 中的并行化机制是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 14:18:18 26 4
gpt4 key购买 nike

我正在使用 Qt 4.7.4 中的 QtNetwork 为 VLC 2.0 编写一个 HTTP 访问模块。我的代码片段如下:

static int Open(vlc_object_t *p_this)
{
....
QNetworkAccessManager *nam = new QNetworkAccessManager;
QNetworkReply *reply = nam->get(QNetworkRequest("http://stackoverflow.com/"));
Q_ASSERT(reply);

QEventLoop loop;
connect(reply, SIGNAL(finished()), &loop, SLOT(quit());
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), &loop, SLOT(quit()));
connect(reply, SIGNAL(readyRead()), &loop, SLOT(quit()));
loop.exec(); // -- BLOCKED HERE in Lion
....
}

相同的代码在 Windows 7 上运行良好,但在 OS X Lion 上会被阻止。 exec() 之后的事件循环永远不会退出()。我还尝试从另一个线程访问 reply->bytesAvailable(),它总是返回 0。我猜原因可能与 QNetworkAccessManager 中的并行机制有关,当父线程被阻塞后 nam 无法获得任何时隙工作通过 QEventLoop。

谁能给我一些建议,为什么事件循环只会在 Mac 上被阻止,以及我可以做些什么来绕过这个问题,让 QNetworkAccessManager 在不创建另一个 QThread 的情况下工作?

顺便说一句,正在使用的 Qt 是使用 Carbon 框架构建的 macports 上的最新版本 (qt4-mac)。

最佳答案

可能必须定期调用QApplication::processEvents() 才能完成工作。

关于c++ - QNetworkAccessManager 中的并行化机制是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9506852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com