找回密码
 立即注册
发表于 2018-1-13 22:48:12 | 显示全部楼层 |阅读模式
2Qter豆
如题,我用qt编写了一个上位机运行在工控机上面。除了QT自己的库还调用外部库及源码,例如QWT绘制曲线,serial源码调用串口类打开串口,xlsx外部库调用接口在Linux下创建和显示excel表格。存储数据用mysql数据库。
大体流程是这样:程序开始运行,初始化完毕界面显示。然后从串口2s读取一个数据(读数据使用线程),线程内部信号触发槽函数,槽函数执行数据在界面显示和数据插入数据库的操作。在这槽函数里面还有数据处理,基本都是加减乘除。除此之外就是一个定时器定时刷新绘制曲线,其余代码都是界面的按钮操作。

如图这两个地方使用了new  没有delete  这样长时间会造成内存泄漏吗?
程序运行的久了  就会卡顿 关机重启就恢复正常  这是什么原因?!
还有一点  QT 逻辑代码用定时器执行好还是while好或者线程好?!



附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册
回复

使用道具 举报

 楼主| 发表于 2018-1-15 09:02:01 | 显示全部楼层
没有大神给分析一波么
回复

使用道具 举报

发表于 2018-1-16 09:22:55 | 显示全部楼层
本帖最后由 angelus 于 2018-1-16 09:24 编辑

先检查你有没有程序会多次调用new去生成实例
在检查下卡顿的时候是cpu负载高,还是内存负载高.
理论上卡顿是cpu引起的,如果是内存溢出,程序会直接就挂了.
还有一个就是检查你的硬件.
回复

使用道具 举报

发表于 2018-1-16 13:01:59 | 显示全部楼层
先检查你有没有程序会多次调用new去生成实例
在检查下卡顿的时候是cpu负载高,还是内存负载高.
理论上卡顿是cpu引起的,如果是内存溢出,程序会直接就挂了.
还有一个就是检查你的硬件.
回复

使用道具 举报

 楼主| 发表于 2018-1-17 13:15:07 | 显示全部楼层
angelus 发表于 2018-1-16 09:22
先检查你有没有程序会多次调用new去生成实例
在检查下卡顿的时候是cpu负载高,还是内存负载高.
理论上卡顿是 ...

基本上所有的实例都是在构造函数里生成的,除了图片的那两个,一个是定时器里一个是点击按钮时。其中QTablewidget的那个如果delete,表格就不显示数据了。查了好多,有人说是QTablewidget内部有机制会处理。。。
运行久了free -m查看,使用的内存会越来越多,但是涨到一定时候就又降下来了。
硬件的话,这款工控机还配置了128的固态硬盘,应该不算差的。
回复

使用道具 举报

发表于 2018-1-17 21:22:01 | 显示全部楼层
降下来说明内存没有问题,检查下cpu负载吧
回复

使用道具 举报

发表于 2018-3-29 23:54:03 | 显示全部楼层
个人意见请参考,两个地方都可能有问题:
1.QWT不断添加点可能造成内存不断占用;
2.qtableWidgetItem的不断增加会造成卡顿,在Qt4.8的VXworks版本遇到过。解决方法很粗暴,给定一个item限额,超过后删除最顶部的item。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

gzf111

    主题

    帖子

    8

    积分

    Qter1级会员

    Rank: 1

    积分
    8

Qter1级会员

发私信

Qt开源社区——开源 共享 自由

微信扫一扫
查看精品教程!