在QT中使用同步阻塞式HTTP请求的方法
QT中对HttpRequest的实现是利用了QT的singal-slot实现的异步请求,虽然有时这很有用,比如节约时间,不会使UI卡住等,但有时,我们还是需要阻塞式的同步HTTP请求,因为在这个HTTP请求返回之前是不能继续工作的,比如登录等任务,没有登录成功就不能继续,此时,我们可以利用QEventLoop进行循环,等待HTTP请求的完成.
QEventLoop 用来在QT经常程序中实现延迟,循环等任务. 在QEventLoop创建后,程序就会一直循环在这里.退出QEventLoop循环的方法是调用它的quit()方法.所以,我们的HTTP请求可以改写为下面的形式:
1
2
3
4
|
// httpResponse 等部分省略
QEventLoop loop;
QObject::connect(response,SIGNAL(finished()),&loop,SLOT(quit()));
loop.exec();
|
我们为HTTP请求的完成事件创造一个slot,即loop的quit事件,这样,在HTTP请求完成后,loop循环才会结束.这样就达到了同步HTTP请求的目的.
但是,如果遇到网络问题等.HTTP请求超时,这里就会卡很长时间,所以,有必要加一个超时判断:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// httpResponse 等部分省略
QEventLoop loop;
QTimer timer;
QObject::connect(response,SIGNAL(finished()),&loop,SLOT(quit()));
QObject::connect(&timer,SIGNAL(timeout()),&loop,SLOT(quit()));
timer.start(1000);
loop.exec();
if (timer.isActive()){
timer.stop();
return true ;
} else {
response-> abort ();
return false ;
}
|
这样,在HTTP请超过1s时,返回false. 成功时返回true.
转载于:https://www.cnblogs.com/lifan3a/articles/7698984.html
在QT中使用同步阻塞式HTTP请求的方法相关推荐
- AIO,BIO,NIO:同步阻塞式IO,同步非阻塞IO,异步非阻塞IO
BIO,同步阻塞式IO,简单理解:一个连接一个线程 NIO,同步非阻塞IO,简单理解:一个请求一个线程 AIO,异步非阻塞IO,简单理解:一个有效请求一个线程 IO:阻塞IO BIO:同步阻塞IO.服 ...
- QT中ui更改后不能更新的解决方法
QT中ui更改后不能更新的解决方法 参考文章: (1)QT中ui更改后不能更新的解决方法 (2)https://www.cnblogs.com/qiaozhoulin/p/4509939.html 备 ...
- qt5设置linux系统时间,Qt中使用QLabel显示时间的两种方法
Qt中使用QLabel显示时间的两种方法思路一致,只是实现方法不一样而已. main.cpp #include "displaytime.h" #include int main( ...
- 在QT中自定义头文件和源文件的使用方法
在QT中自定义头文件和源文件的使用方法 最近想用QT来实现一个简单的功能,为了便于函数的集成需要将功能函数进行封装,自己补了些c++的函数封装方法,发现在QT中还不太一样.接来下简单介绍一下具体怎么实 ...
- Qt中,软件多语言国际化翻译的方法与步骤
Qt中,软件多语言国际化翻译的方法与步骤 在Qt的项目开发过程中,有时软件要翻译成多语言版本,这就涉及到国际化方面的操作.虽然Qt对这方面集成了很多工具,操作起来比较方便,本文还是总结一下国际化的方法 ...
- iOS网络开发中的同步、异步和请求队列
在iOS网络编程中,我们经常会遇到线程的同步和异步问题,同时为了对异步请求更加精准丰富的控制,我们还常常在iOS中使用请求队列,下面就来谈谈iOS开发中同步.异步以及请求队列的使用方法. 1. 同步意 ...
- qt中记录数据的一次接收处理方法
引言 在udp通信中,发送请求后,等待接收端的响应,有时一个回应被分割成好几次发送,这种反馈的形式出现带有随机性,正常的情况下是一次反馈所有的数据,但是会出现一次反馈被分成好几次反馈.像下面这样: 请 ...
- QT中获取选中的radioButton的两种方法
QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioButton* pbtn = qobject_cast&l ...
- Qt中常用的3种提示框设计方法
Qt中常用的提示信息设计方法 [问题背景]通常,在项目项目开发的过程中,某些人机交互界面需要对用户的输入数据进行合法性判断,如果用户输入数据合法,则进入下一步流程,否则,就要给出相应的错误提示,以提示 ...
最新文章
- oracle 替换逗号,oracle自定义函数:将字符串中的特殊字符转化为逗号
- 视频播放页php,html jquery简易视频播放器
- iOS中 最新微信支付/最全的微信支付教程详解 韩俊强的博客
- 一文看懂:互联网产品分析,该如何做?
- 最新的.NET Framework聚焦于改进可访问性
- Jmeter 使用脚本 生成html测试报告
- SVG 入门——理解viewport,viewbox,preserveAspectRatio
- Linux光标移动异常
- Bugku -disordered_zip【MISC】
- 微软修改 MIT 项目原作者版权声明引发争议;白宫为提高开源安全性邀请软件行业者座谈;Ruby 3.1.0 发布 | 开源日报
- 适合php编程的笔记本电脑,【求推荐】(女生用/编程) 的 笔记本(Thinkpad) - 笔记本电脑(Notebook)版 - 北大未名BBS...
- 地址解析(仅供参考与学习)<Java>
- GR-MnO2 石墨烯修饰纳米二氧化锰/CD-MnO2碳点修饰二氧化锰复合材料/CMSs@MnO2碳微球包覆二氧化锰
- 使用GI Agent(XAG)实现GoldenGate的高可用性(二)
- 孙陶然:不要轻易开始创业
- 利用集群技术实现Web服务器的负载均衡 集群和负载均衡的概念
- 时事评论--公众有权知道“砒霜门“的真像
- Sdut PTA练习 2021级-JAVA02 基础语法1--标识符、常量与变量、数据类型、运算符与表达式
- golang无穷大的判断
- 2021年知识付费行业的趋势