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

C++ QNetworkAccessManager中的并行化机制是什么?,c++,macos,qt,vlc,qnetworkaccessmanager,C++,Macos,Qt,Vlc,Qnetworkaccessmanager,我正在使用Qt4.7.4中的QtNetwork为VLC2.0编写HTTP访问模块。我的代码片段如下: static int Open(vlc_object_t *p_this) { .... QNetworkAccessManager *nam = new QNetworkAccessManager; QNetworkReply *reply = nam->get(QNetworkRequest("http://stackoverflow.com/")); Q_ASSERT

我正在使用Qt4.7.4中的QtNetwork为VLC2.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
  ....
}
同样的代码在Windows7上运行良好,但在OSXLion上会被阻止。exec之后的事件循环从不退出。我还尝试从另一个线程访问reply->bytesavable,该线程始终返回0。我想原因可能与QNetworkAccessManager中的并行机制有关,当父线程被QEventLoop阻塞后,nam无法获得任何时间段来工作

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

顺便说一句,使用的Qt是使用Carbon framework qt4 mac构建的macports上的最新版本。

您可能需要定期调用QApplication::processEvents才能完成任务