当前位置: 首页 > news >正文

【QT线程】子线程阻塞主线程的一次网络api请求案例

阻塞源码赏析

这是最近一次项目遇到的问题,原因是我觉得子线程里俩次请求间隔太短了,会引起服务器屏蔽我的api因此,我故作聪明加多了一个延时函数,欢迎各位鉴赏代码。

// 并行发起双请求
QNetworkRequest liveRequest(liveUrl);
liveRequest.setSslConfiguration(sslConfig);
QNetworkReply *liveReply = m_manager->get(liveRequest);

 QThread::msleep(10000);  

QNetworkRequest forecastRequest(forecastUrl);
forecastRequest.setSslConfiguration(sslConfig);
QNetworkReply *forecastReply = m_manager->get(forecastRequest);

// 处理实时响应
connect(liveReply, &QNetworkReply::finished, [this, liveReply]() {
    if (liveReply->error() == QNetworkReply::NoError) {
        QJsonDocument doc = QJsonDocument::fromJson(liveReply->readAll());
        parseLiveData(doc.object());
    }
    liveReply->deleteLater();
});

// 处理预报响应
connect(forecastReply, &QNetworkReply::finished, [this, forecastReply]() {
    if (forecastReply->error() == QNetworkReply::NoError) {
        QJsonDocument doc = QJsonDocument::fromJson(forecastReply->readAll());
        parseForecastData(doc.object());
    }
    forecastReply->deleteLater();
});

下面这个版本才是不会引起主线程阻塞的版本,各位可以分析是什么原因导致了主线程阻塞。


// 串行发起双请求
QNetworkRequest liveRequest(liveUrl);
liveRequest.setSslConfiguration(sslConfig);
QNetworkReply *liveReply = m_manager->get(liveRequest);

// 处理实时响应
connect(liveReply, &QNetworkReply::finished, [this, liveReply]() {
    if (liveReply->error() == QNetworkReply::NoError) {
        QJsonDocument doc = QJsonDocument::fromJson(liveReply->readAll());
        parseLiveData(doc.object());
        QThread::msleep(1000);
    }
    liveReply->deleteLater();
});

QNetworkRequest forecastRequest(forecastUrl);
forecastRequest.setSslConfiguration(sslConfig);
QNetworkReply *forecastReply = m_manager->get(forecastRequest);

// 处理预报响应
connect(forecastReply, &QNetworkReply::finished, [this, forecastReply]() {
    if (forecastReply->error() == QNetworkReply::NoError) {
        QJsonDocument doc = QJsonDocument::fromJson(forecastReply->readAll());
        parseForecastData(doc.object());
    }
    forecastReply->deleteLater();
});

相关文章:

  • 机试准备第六天
  • [MySQL] MySQL复合查询(多表查询、子查询)
  • 各种传参形式
  • C++/C 编程宝典:掌握指针数组与数组指针的关键区别
  • PHP学习
  • SFP+(Enhanced Small Form-factor Pluggable)详解
  • 在Pycharm中将ui文件修改为py文件
  • Code Review 是一场不断完善自己修行
  • 晋升系列3:面评技巧
  • 【爬虫基础】第二部分 爬虫基础理论 P3/3
  • EA SPORTS FC 25 2000+ 大型MOD整合包
  • 数据库操作与数据管理——Rust 与 SQLite 的集成
  • Python 数据结构 4.单向链表
  • 测试人员如何驱动开发?
  • 【踩坑随笔】`npm list axios echarts`查看npm依赖包报错
  • ZYNQ-PL实践课堂(三)IP核之MMCM/PLL
  • Android Coil3配置Application单例ImageLoader,Kotlin
  • 【再谈设计模式】备忘录模式~对象状态的守护者
  • iOS实现一个强大的本地状态记录容器
  • 自定义类型:联合和枚举
  • 湖南住房和城乡建设厅网站/百度搜索官网
  • 手机网站建设 豆丁/广告公司网站制作
  • 视频网站建设 可行性报告/windows优化大师的特点
  • 中国最大的建站网站/免费b站推广网站
  • 基金网站建设/最好的bt种子搜索引擎
  • 网站公安网备案什么意思/百度做推广一般要多少钱