前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Qt开源网络库[6]-超时功能

Qt开源网络库[6]-超时功能

作者头像
Qt君
发布于 2019-07-15 08:33:53
发布于 2019-07-15 08:33:53
1.5K00
代码可运行
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程
运行总次数:0
代码可运行

距离上一系列篇已经有半年没有更新了。本次介绍该网络库最近新增的超时功能(超时中断请求)。由于Qt的网络请求不能设置超时时间,故只能额外封装了。

接口

  • timeout通过msec参数设置超时时间;
  • msec<=0则禁用超时功能;
  • msec>0则使能超时功能,并将超时时间设置为 msec毫秒。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @brief msec <= 0, disable timeout
 *        msec >  0, enable timeout
 */
HttpRequest &timeout(const int &msec = -1);

实现

  • HttpResponseTimeout构造函数传递 QNetworkReplytimeout参数用于超时中断设置;
  • QTimer::singleShot为单次定时器;
  • 当定时器超时后则会执行 onTimeout函数;
  • onTimeout函数会执行 QNetworkReplyabortdeleteLater来完成请求中断。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class HttpResponseTimeout : public QObject {
    Q_OBJECT
public:
 HttpResponseTimeout(QNetworkReply *parent = NULL, const int timeout = -1) : QObject(parent) {
 if (timeout > 0)
 QTimer::singleShot(timeout, this, SLOT(onTimeout()));
 }
private slots:
 void onTimeout() {
 QNetworkReply *reply = static_cast<QNetworkReply*>(parent());
 if (reply->isRunning()) {
            reply->abort();
            reply->deleteLater();
 }
 }
};

示例

  • 使用示例设置30秒的超时时间,超时结束后将会强制中断当前请求。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static HttpService http;
http.get("http://www.qtbig.com")
 .onResponse(this, SLOT(finish(QByteArray))) /* 接收数据 */
 .onResponse(this, SLOT(downloadProgress(qint64,qint64))) /* 接收进度 */
 .onError(this, SLOT(error(QNetworkReply::NetworkError, QNetworkReply*))) /* 错误处理 */
 .timeout(30*1000) /* 30s */
 .exec();
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Qt开源网络库[2]-接口篇
上一篇介绍了Qt开源网络库,有兴趣的可以翻开往期推送.今篇主要介绍该开源网络库接口的用法.
Qt君
2019/07/15
1.7K0
Qt学习笔记网络(一)
Qt5 移除了QHttp是因为功能重复 用QNetworkAccessManager完全能搞定 新建一个控制台应用程序 看一下QNetworkAccessManager的帮助文档 需要添加Qt + =
lpxxn
2018/01/31
1.1K0
Qt学习笔记网络(一)
Qt开源网络库[5]-lambda支持
在不断使用该库的过程中会遇到这样的一个问题,比如错误提示我只需要打印到终端就可以了,每一次的请求都需要定义一个槽函数然后等待异步调用.在这个过程中,需要定义一个槽函数就会略显得有些繁琐了.
Qt君
2019/07/15
9940
Qt开源网络库[8]-上传文件与超时处理
访问 https://github.com/aeagean/QtNetworkService
Qt君
2023/03/17
1.6K0
Qt开源网络库[8]-上传文件与超时处理
C++ Qt开发:QNetworkAccessManager网络接口组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QNetworkAccessManager组件实现Web网页访问。
王 瑞
2024/03/12
6350
C++ Qt开发:QNetworkAccessManager网络接口组件
Qt开源网络库[4]-原理篇下
上一篇分析到原理上,主要讲述的是builder模式设计与HttpService,HttpRequest的原理和实现。本篇将会讲到HttpResponse的响应机制与自动推导接收者(槽函数)的实现。
Qt君
2019/07/15
9510
Qt开源网络库[7]-阻塞功能
有时候使用多个有顺序Http请求时(下一个请求需要上一个请求的内容),这时候阻塞功能非常有用。 接口 阻塞当前线程,并进入事件循环。 HttpRequest &block(); 实现 使用QEventLoop实现。 QEventLoop loop; QObject::connect(m_networkReply, SIGNAL(finished()), &loop, SLOT(quit())); loop.exec(); /* 阻塞当前线程,如在主线程不会冻结界面。*/ 示例 static HttpServ
Qt君
2019/11/06
1K0
简易版QQ?Qt也可以实现!(一)
客户端与服务器之间的数据传送在很多案例场景里都会有应用。这里Jungle用Qt来简单设计实现一个场景,即:
用户6557940
2022/07/24
8670
简易版QQ?Qt也可以实现!(一)
2.6.4 Qtimer定时器介绍
QTimer类提供了定时器功能,在指定的时间超时之后可以发出超时信号,可以单次或者重复定时。 QTimer使用方法比较简单:先创建一个QTimer定时器,使用start()函数设定定时的时间并开始计时。然后将timeout()信号连接到适当的槽函数。当定时的时间到达后,QTimer将会发出timeout()信号。注意:定时器的时间单位为毫秒(ms)。
DS小龙哥
2022/01/12
6860
Qt开源网络库[3]-原理篇上
上一篇介绍到接口的使用,本篇主要讲述的是该网络库的HttpService与HttpRequest原理与实现。对QNetworkAccessManager封装和管理Http请求。采用builder设计模式,这样在多参数情况下可以灵活运用。
Qt君
2019/07/15
1.3K0
10.QT-定时器
QObject定时器 需要头文件#include <QTimerEvent>  需要函数 int QObject::startTimer(int interval); //启动定时器,并设置定时器间隔时间(单位ms),启动后返回该定时器ID号. void QObject::timerEvent(QTimerEvent * event); //定时器处理函数,需要用户来重写它,如果有多个定时器,可以通过QTimerEvent::timerId()来判断定时器ID处理 void killTimer(int
诺谦
2018/05/28
1.7K0
嵌入式QT应用程序与WEB端通信遇到的HTTPS校验证书的问题记录
近期在做嵌入式QT应用程序与物联网平台交互。其实这个需求我在以往的工作中也做过,只不过这次的情况有些特殊。当我使用QNetworkAccessManager向平台分别发起POST和GET请求时,打印错误如下:
杨源鑫
2022/03/24
1.2K0
嵌入式QT应用程序与WEB端通信遇到的HTTPS校验证书的问题记录
03 QT基本控件和功能类
当在QT中,在已知类名的情况下,要了解类的构造函数 常用属性 及 信号和槽 常用api
天天Lotay
2023/10/15
3570
03 QT基本控件和功能类
C++ Qt开发:ProgressBar进度条组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍ProgressBar进度条组件的常用方法及灵活运用。
王 瑞
2023/12/16
6410
C++ Qt开发:ProgressBar进度条组件
Qt多种定时器
  使用startTimer开启定时器,使用killTimer(int id)接口来关闭指定的定时器。 启动定时器后会在对应间隔时间触发timerEvent事件。 示例:
Qt君
2019/07/15
2.5K0
Qt多种定时器
Qt官方示例-网络下载器
  本文的「网络下载器」共有两个版本,分别是「原始版本」和「升级版本」。下列源码是原始版本代码,而升级版本新增了下载进度和增强代码的健壮性。
Qt君
2023/03/17
1.6K0
Qt官方示例-网络下载器
Qt实用技巧:使用OpenCV库的视频播放器
使用OpenCV库的视频播放器(支持播放器操作,如暂停、恢复、停止、时间、进度条拽托等)。
OpenCV学堂
2019/11/28
2.6K0
Qt编写地图综合应用14-离线地图下载
网上其实有很多各种各样的离线地图下载器,大部分都是要收费的,免费的要么是限制了下载的瓦片数量或者级别,要么是下载的瓦片图打上了水印,看起来很难看,由于经常需要用到离线地图,摆脱这个限制,特意花了点时间重新研究了瓦片地图的原理,做了个离线地图下载器,其实瓦片地图下载没有那么复杂,其实就是从开放的几个服务器地址组建要请求的瓦片地图的地址,发送请求以后会自动将图片返回给你,你只需要拿到图片数据保存成图片即可。
feiyangqingyun
2020/04/17
1.5K0
Qt编写地图综合应用14-离线地图下载
Qt学习之路_6(Qt局域网聊天软件)
http://www.cnblogs.com/tornadomeet/archive/2012/07/04/2576355.html
bear_fish
2018/09/20
3.4K0
Qt学习之路_6(Qt局域网聊天软件)
【OCR区域识别工具】OCR指定区域图片自动识别内容重命名软件使用教程,基于QT和腾讯云的完整实现步骤
在当今信息爆炸的时代,我们经常会遇到大量的图像文件,这些图像中包含了许多有价值的信息。然而,对于用户来说,准确识别图像中的信息并对其进行有效的管理却并非易事。特别是在某些特定业务场景下,用户可能只关心图像中某个特定区域的信息,例如发票中的金额区域、证件中的姓名区域等。
不负众望
2025/02/24
4770
【OCR区域识别工具】OCR指定区域图片自动识别内容重命名软件使用教程,基于QT和腾讯云的完整实现步骤
相关推荐
Qt开源网络库[2]-接口篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验