首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt开源网络库[6]-超时功能

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

作者头像
Qt君
发布2019-07-15 16:33:53
1.2K0
发布2019-07-15 16:33:53
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

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

接口

  • timeout通过msec参数设置超时时间;
  • msec<=0则禁用超时功能;
  • msec>0则使能超时功能,并将超时时间设置为 msec毫秒。
/**
 * @brief msec <= 0, disable timeout
 *        msec >  0, enable timeout
 */
HttpRequest &timeout(const int &msec = -1);

实现

  • HttpResponseTimeout构造函数传递 QNetworkReplytimeout参数用于超时中断设置;
  • QTimer::singleShot为单次定时器;
  • 当定时器超时后则会执行 onTimeout函数;
  • onTimeout函数会执行 QNetworkReplyabortdeleteLater来完成请求中断。
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秒的超时时间,超时结束后将会强制中断当前请求。
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 接口
  • 实现
  • 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档