Qt 的异步转同步

Qt是最好用的特性就是信号槽机制。几乎所有的API都支持通过信号槽机制实现异步。今天在这里我不是要讨论信号槽机制。而是讨论如何把异步转化成同步操作。也许有人问,异步操作多好,为什么要用同步方式。
我们来想像一下, 用户登陆操作。
用户点击登陆->数据传到后台->后台验证合法性->返回数据->客户端接收数据并分析->返回登陆成功与否等相关信息
用户点击登陆和获取返回信息要在一起,而不能分开,去等待信号返回,这样会要保存大量信息。总体上来讲,异步会比同步难做好多。
在网上搜到的关于异步怎么转同步的时候,大家都会用到QEventLoop。这大概就是解决办法吧。

QEventLoop eventloop;
    QSharedPointer<QNetworkReply> reply{nam.post(req, encodeStr, Delete)};
    connect(reply.data(), &QNetworkReply::finished, &eventloop, &QEventLoop::quit);
eventloop.exec();

这样既不会导致GUI界面被卡,把异步操作转成同步操作。 可以在eventloop.exec();后对reply做相关的操作。


博主是菜鸟,如果你有兴趣,可以留言讨论~

Written by 

你来或不来,我都在这里等你~

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注