Qt中QSerialPort使用时内存泄漏问题与解决

在Qt应用中遇到内存泄漏导致的不定时闪退问题,根源在于QSerialPort的waitforReadyRead()使用不当。通过改进读取策略,避免连续读取时的阻塞,成功解决了内存泄漏和串口读取效率问题。同时发现图像显示线程可能干扰串口读取速度,尚在寻找解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 问题描述

在开发一个瞄准系统,包含的头瞄功能中,需要实现云台实时随动。要求:1、用串口读取IMU的数据,获取实时姿态;2、用另一个串口控制云台实时随动。
单独测试云台头瞄时程序正常运行,但放入瞄准系统后(系统整体还包含图像显示、处理等功能)会Qt应用出现不定时闪退,具体表现为:

启动应用后,程序起初可以正常读取IMU数据并进行头瞄;
经过不定长的时间后(一般为几秒到十几秒),程序闪退;
Qt窗口自动关闭,控制台没有任何报错或警告提示,退出代码为-1073740940

2 代码诊断与解决方法

奇怪的退出代码一般都是内存泄漏问题,但网上没有找到类似的问题,由于云台转动功能之前就有,推断问题出在IMU数据读取上。
优快云上找到有在死循环内添加依据qApp->processExecute()解决的,但这个方法在这个系统上没有用,不过我的代码和他的代码有一点不同:
我的代码在读取IMU数据时,是直接从串口读取的(由于IMU数据发送频率很高,不需要担心缓存区没有数据,即使没有也可以用循环来等待),且使用waitforReadyRead()的方式不对,具体如下

while(1
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值