【背景】一个类似Windows任务管理器的性能界面。该界面有多个曲线图同时定时刷新,每个曲线图包括多条曲线更新,数据更新频率大概为一秒一次。程序中曲线图已封装为自定义的图表类,给出数据更新接口。

【初始方案】主程序设计方案上,采用数据收集和数据更新分开的方式,即数据收集线程仅收集并解析来自数据源的数据,并分门别类的存储到共享结构体中。数据更新线程在收到数据更新信号之后,把新的数据刷新到图表中。

【存在问题】数据刷新时,鼠标拖拽主界面移动时存在停顿,且停顿频率与数据刷新频率相当。尤其是当数据量较大或更新频率加快时,停顿效果更新严重。

【问题分析】经调试发现,虽然数据收集线程在对数据收集后已完成数据的解析工作,并将整理好的数据推送给更新线程。但在曲线图更新的过程中,曲线图实例需要从已有曲线的数据拉取出来,删除存在时间最早的数据,再将新的数据更新到已有数据中。这一过程对于单个曲线图同时存在多条曲线的更新时耗时较长,尤其对于主界面同时存在多个曲线图的情况时,更甚。由此导致数据在刷新过程中存在较大程度的延时情况,从主界面的使用情况看,即鼠标拖拽时,出现停顿甚至是程序未响应的发生。

【解决方法】数据收集线程在整理完数据后,将数据通过图表实例的更新接口给入,该接口从对已有的数据进行更新,并保存在实例成员中,但不做刷新处理。在数据收集线程做完本次数据收集和整理过程之后,通过信号量通知更新线程。更新线程获得信号后,调用图表实例的刷新接口,刷新接口将已准备好的数据直接更新到界面中,不再处理其数据,如此一来,在动态更新曲线的过程中,鼠标拖拽不再出现停顿或程序停止运行的情况。

上述过程,可从Demo代码中下载,通过配置其中的 USING_QTIMERUSING_STD_THREAD 调用不同的处理方案(注意,demo使用了Qt的QChart,使用QtCreater需安装相应的模块,Demo中的数据处理过程以延迟模拟)

Qt界面刷新优化的一些心得相关推荐

  1. Qt 界面加载卡顿或刷新问题

    主要有以下几个解决方案可以去尝试下: 一.设置WA_Mapped属性 // 让界面可以及时更新 void CMainStaticsWindows::showEvent(QShowEvent *even ...

  2. Qt界面优化:鼠标双击特效

    Qt界面优化:鼠标双击特效 文章目录 Qt界面优化:鼠标双击特效 一.双击特效 二.使用步骤 1. .h部分 2. .cpp部分 注意点 gif动图的背景必须是透明的!!! 总结 一.双击特效 二.使 ...

  3. Qt界面优化:Qt窗体控件设置

    Qt界面优化:Qt窗体控件设置 文章目录 Qt界面优化:Qt窗体控件设置 一.效果图 1.鼠标移动点击效果 2. Qt托盘效果 二.使用步骤 1. 背景图片的添加 2. 控件样式的更改 3. Qt窗体 ...

  4. Qt界面优化:Qt去边框与窗体圆角化

    Qt界面优化:Qt去边框与窗体圆角化 文章目录 Qt界面优化:Qt去边框与窗体圆角化 一.效果图 二.使用步骤 1. .h部分 2. .cpp部分 总结 一.效果图 二.使用步骤 1. .h部分 代码 ...

  5. QT界面中实现视频帧显示的多种方法及应用

    QT界面中实现视频帧显示的多种方法及应用 (一) 引言 1.1 视频帧在QT界面中的应用场景 1.2 不同方法的性能和适用性分析 1.2.1 使用QLabel和QPixmap 1.2.2 使用QPai ...

  6. Android:一个线程玩转商品列表所有item的倒计时器,并对Adapter进行单控件刷新优化...

    所以这次我还是会跟大家讲一下关于商城的一个需求------商品的倒计时器. 或者有人会说,商品的一个倒计时很简单,但是我这次的需求是一个商品列表,每个商品都需要有一个自己的计时器.首先我们看看需求效果 ...

  7. 基于嵌入式QT界面GPS定位系统设计与实现

    目 录 第1章 绪论- -1 1.1 选题背景和意义- - .1 1.2 主要研究内容- - -1 第2章 GPS系统基础知识介绍- - - -2 2.1 GPS 定位的坐标系统- - - -2 2. ...

  8. QT界面简单的图形移动和鼠标绘图

    QT界面图形移动及鼠标绘图 0.首先头文件: #include <QPainter> #include <QMouseEvent> #include <QKeyEvent ...

  9. halcon与QT联合:(5.1)瓶盖检测以及QT界面搭建

    halcon实现瓶盖检测与定位代码: dev_close_window() dev_open_window(0, 0, 1024, 1024, 'black', WindowHandle) list_ ...

  10. Winform开发的界面处理优化

    在Winform开发中,客户体验是个很好的参考性指标,如果一个功能使用的时候感觉很流畅,说明我们的程序执行效率还不错,但是随着数据的真多,原先可能流程的地方可能会变得比较卡,这时候就需要追本索源,找到 ...

最新文章

  1. Java入门之HelloWorld
  2. vue实例、指令、生命周期
  3. 大数据学习系列----基于Spark Streaming流式计算
  4. Topic model相关文章总结
  5. 华为怒发公开信;锤子手机难产罗永浩陷尴尬处境;苹果错失 5G | 极客头条
  6. 1064. 朋友数(20)-PAT乙级真题
  7. 文件管理浏览器组件支持doc、excel、ppt、txt格式文件的预览和编辑,支持ofd、pdf文件的预览。
  8. 复盘:企业微信中国发展简史
  9. 快手、抖音等短视频营销模式
  10. 部门平均工资mysql_按部门统计各工资级别的人数、平均工资。
  11. 最新Hive/Hadoop高频面试点小集合
  12. 2016年11月30日 angularJS input=file 绑定change事件
  13. 系统架构中概念总结二
  14. python 存储字典_python 字典存储
  15. Ubuntu下使用ROS moveit 连接ABB机器人
  16. eeglab的安装和安装时遇到的问题
  17. 一行代码让Python的运行速度提高100倍
  18. 恋物志(一):网红带货,宠主追捧,2021年宠物智能硬件会火吗?
  19. html5卤虾,自制五香小龙虾,自己做干净卫生,香辣可口,太过瘾了
  20. d3 svg path添加文本_D3.js 力导向图的显示优化

热门文章

  1. jsp数据库中文乱码处理
  2. windows开机启动方法
  3. 易打卡模板微信签到打卡小程序源码
  4. ViewPager Kotlin 教程入门
  5. 什么是消息队列及消息队列原理和应用场景详解
  6. 简单有效的记录日常收支
  7. 恶意代码分析相关工具漏洞挖掘相关工具
  8. 全自动抠图换背景软件下载_抠图换背景app下载-抠图换背景下载v1.1.6 安卓版-西西软件下载...
  9. matlab数组从小到大排序,matlab数组排序
  10. rufus下载包,exsi自启动制作工具