QNetworkAccessManager中的并行机制是什么? [英] What is the parallelization mechanism in QNetworkAccessManager?

查看:221
本文介绍了QNetworkAccessManager中的并行机制是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am writing an HTTP access module for VLC 2.0 using QtNetwork from Qt 4.7.4. My code snips follow:

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阻止后无法获得任何时间槽。

The same code works well on Windows 7, but would get blocked on OS X Lion. The event loop after exec() never quit(). I also tried accessing reply->bytesAvailable() from another thread, which always returned 0. I guess the reason could be related to the parallel mechanism in QNetworkAccessManager, when nam couldn't get any time slots to work after the parent thread was blocked by QEventLoop.

任何人都可以给我一些建议为什么事件循环将只能在Mac上被阻止,我可以做什么来绕过这个问题使QNetworkAccessManager工作,而不创建另一个QThread?

Could anyone give me some suggestions why event loop would get blocked only on Mac, and what I could do to bypass such issue to make QNetworkAccessManager to work without creating another QThread?

BTW,使用的Qt是

BTW, the Qt being used is the latest version on macports built with Carbon framework (qt4-mac).

推荐答案

您可以 定期调用 QApplication :: processEvents()以完成作业。

You may have to make periodic calls to QApplication::processEvents() to get the job done.

这篇关于QNetworkAccessManager中的并行机制是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆