【发布时间】:2012-05-13 08:01:08
【问题描述】:
这个Qt代码会不会陷入死循环?
QNetworkAccessManager m;
QNetworkReply *reply = m.get(QNetworkRequest(QUrl("http://www.example.org/")));
QEventLoop loop;
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
qDebug() << reply->readAll();
delete reply;
这基本上是一种显示网页内容的“同步”方式。
我没有观察到使用它的任何问题,但我考虑了以下情况:
-
reply的finished信号在创建事件循环之前发出,并在finished和quit之间建立信号槽连接 - 不会从该点发出任何信号,因此永远不会触发
quit -
loop.exec()会不断循环
有可能发生这种情况,还是我不了解 Qt 事件循环的工作原理?
【问题讨论】:
标签: c++ qt concurrency