如何确保真正抓住QNetworkReply :: finished

时间:2015-12-16 17:26:01

标签: qt qnetworkreply

当我有这样的代码时:

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

如果第一行和第二行之间的回复结束怎么办?连接来得晚,不是吗?

1 个答案:

答案 0 :(得分:2)

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

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

在我开始执行此类操作时,在异步操作开始时不同步地发出像finished()这样的信号是最重要的规则之一。