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请求的方法相关推荐

  1. AIO,BIO,NIO:同步阻塞式IO,同步非阻塞IO,异步非阻塞IO

    BIO,同步阻塞式IO,简单理解:一个连接一个线程 NIO,同步非阻塞IO,简单理解:一个请求一个线程 AIO,异步非阻塞IO,简单理解:一个有效请求一个线程 IO:阻塞IO BIO:同步阻塞IO.服 ...

  2. QT中ui更改后不能更新的解决方法

    QT中ui更改后不能更新的解决方法 参考文章: (1)QT中ui更改后不能更新的解决方法 (2)https://www.cnblogs.com/qiaozhoulin/p/4509939.html 备 ...

  3. qt5设置linux系统时间,Qt中使用QLabel显示时间的两种方法

    Qt中使用QLabel显示时间的两种方法思路一致,只是实现方法不一样而已. main.cpp #include "displaytime.h" #include int main( ...

  4. 在QT中自定义头文件和源文件的使用方法

    在QT中自定义头文件和源文件的使用方法 最近想用QT来实现一个简单的功能,为了便于函数的集成需要将功能函数进行封装,自己补了些c++的函数封装方法,发现在QT中还不太一样.接来下简单介绍一下具体怎么实 ...

  5. Qt中,软件多语言国际化翻译的方法与步骤

    Qt中,软件多语言国际化翻译的方法与步骤 在Qt的项目开发过程中,有时软件要翻译成多语言版本,这就涉及到国际化方面的操作.虽然Qt对这方面集成了很多工具,操作起来比较方便,本文还是总结一下国际化的方法 ...

  6. iOS网络开发中的同步、异步和请求队列

    在iOS网络编程中,我们经常会遇到线程的同步和异步问题,同时为了对异步请求更加精准丰富的控制,我们还常常在iOS中使用请求队列,下面就来谈谈iOS开发中同步.异步以及请求队列的使用方法. 1. 同步意 ...

  7. qt中记录数据的一次接收处理方法

    引言 在udp通信中,发送请求后,等待接收端的响应,有时一个回应被分割成好几次发送,这种反馈的形式出现带有随机性,正常的情况下是一次反馈所有的数据,但是会出现一次反馈被分成好几次反馈.像下面这样: 请 ...

  8. QT中获取选中的radioButton的两种方法

    QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioButton* pbtn = qobject_cast&l ...

  9. Qt中常用的3种提示框设计方法

    Qt中常用的提示信息设计方法 [问题背景]通常,在项目项目开发的过程中,某些人机交互界面需要对用户的输入数据进行合法性判断,如果用户输入数据合法,则进入下一步流程,否则,就要给出相应的错误提示,以提示 ...

最新文章

  1. oracle 替换逗号,oracle自定义函数:将字符串中的特殊字符转化为逗号
  2. 视频播放页php,html jquery简易视频播放器
  3. iOS中 最新微信支付/最全的微信支付教程详解 韩俊强的博客
  4. 一文看懂:互联网产品分析,该如何做?
  5. 最新的.NET Framework聚焦于改进可访问性
  6. Jmeter 使用脚本 生成html测试报告
  7. SVG 入门——理解viewport,viewbox,preserveAspectRatio
  8. Linux光标移动异常
  9. Bugku -disordered_zip【MISC】
  10. 微软修改 MIT 项目原作者版权声明引发争议;白宫为提高开源安全性邀请软件行业者座谈;Ruby 3.1.0 发布 | 开源日报
  11. 适合php编程的笔记本电脑,【求推荐】(女生用/编程) 的 笔记本(Thinkpad) - 笔记本电脑(Notebook)版 - 北大未名BBS...
  12. 地址解析(仅供参考与学习)<Java>
  13. GR-MnO2 石墨烯修饰纳米二氧化锰/CD-MnO2碳点修饰二氧化锰复合材料/CMSs@MnO2碳微球包覆二氧化锰
  14. 使用GI Agent(XAG)实现GoldenGate的高可用性(二)
  15. 孙陶然:不要轻易开始创业
  16. 利用集群技术实现Web服务器的负载均衡 集群和负载均衡的概念
  17. 时事评论--公众有权知道“砒霜门“的真像
  18. Sdut PTA练习 2021级-JAVA02 基础语法1--标识符、常量与变量、数据类型、运算符与表达式
  19. golang无穷大的判断
  20. 2021年知识付费行业的趋势

热门文章

  1. 每月拿几百元来买基金,有意义吗?
  2. 如何保持婚姻的新鲜感?
  3. 你确定了项目,就不要乱变了
  4. 让餐饮店生意火爆的三套方案
  5. 手机不支持温度传感器为什么鲁大师可以检测手机电池的温度?
  6. olap 多维分析_将关系数据库与OLAP多维数据集链接
  7. aws rds 加密_AWS RDS SQL Server中的透明数据加密(TDE)
  8. Appium + python - online-install-apk
  9. 【[Violet]樱花】
  10. 就谈个py 的装饰器 decorator