2

当我有这样的代码时:

QNetworkReply* reply = netWorkMansger.post(...);
connect(reply,&QNetworkReply::finished,[=](){//Handler code});

如果在第一行和第二行之间回复完成了怎么办?比连接来晚,不是吗?

4

1 回答 1

2

如果在创建期间,在回复指针返回给 post() 的调用者之前,回复会发出 finished(),那么 connect() 确实为时已晚。

QNetworkReply/QNetworkAccessManager 不这样做,回复的网络操作的开始在事件循环中排队,即在您的代码返回事件循环或以其他方式处理事件之前操作不会开始(否则意味着一个显式调用一些讨厌的方法之一,如 QDialog::exec()/QMessageBox::critical 等,QEventLoop::exec() 或 processEvents())。因此,如果您立即连接到回复,您的代码是安全的。

在我看来,在启动异步操作时不同步发出像finished() 这样的信号是实现此类操作时最重要的规则之一。

于 2015-12-16T20:51:25.807 回答