此 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;
这基本上是一种显示网页内容的“同步”方式。
我没有观察到使用它的任何问题,但我考虑了以下情况:
- 的
finished
信号在创建事件循环之前reply
发出,并建立和之间的信号槽连接finished
quit
- 从该点向前不会发出任何信号,因此永远不会触发
quit
loop.exec()
会不断循环
有可能发生这种情况,还是我不了解 Qt 事件循环的工作原理?