前言
在Qt事件循环详解(一)中讲到,可以用QEventLoop来阻塞当前函数并开启事件循环,在UI程序中,我们可以用这种方法将一个异步操作转化成一个同步操作。
异步调用举例
我们来看一个例子,我们向服务器请求服务器时间,异步的方式,我们的写法是这样的:
void Helper::getServerTimeAsync()
{
auto networkManager = new QNetworkAccessManager;
connect(networkManager, &QNetworkAccessManager::finished, [=](QNetworkReply* reply) {
networkManager->deleteLater();
emit serverTime(reply->rawHeader("time").toLongLong());
});
networkManager->get(QNetworkRequest(QUrl("https://10.10.10.1/time")));
}
在上述代码中,我们通过连接QNetworkAccessManager::finished信号来在未来某个时候发出finished信号时处理回复数据,然后将得到的时间以信号的方式发出去。
调用者在使用这个接口时,那就是下面这样:
auto helper = new Helper;
connent(helper, &Helper::serverTime, [](time_t time) {
qDebug() << time;
});
helper.getServerTimeAsync();

本文介绍如何在Qt中使用QEventLoop将QNetworkAccessManager的异步操作转化为同步调用,通过示例展示了具体实现过程及注意事项。
最低0.47元/天 解锁文章

325

被折叠的 条评论
为什么被折叠?



