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

QModbusTCPClient占用内存持续增长

    最近使用QModbusTCPClient通信,需要频繁发送读写请求,发现软件占用内存一直在增减,经过不断咨询和尝试,终于解决了。

1.方案一(失败)

最开始以为是访问太频繁,导致创建reply的对象比delete reply快导致的。尝试增加时间间隔,发现无效。内存占用还是在增加,只是增速慢了点。

QModbusReply*reply= m_modbus->sendReadRequest();

2.方案二(失败)

直接保存每个reply,只有reply==nullptr时才能重复发送对应的request()请求。在reply的finish槽函数中delete reply,同时让reply=nullptr。这样可以避免过于频繁的通信,确保前一次request()处理响应之后再次发送相同的request().

if(!m_reply[4])         //确保前一次响应处理之后再次发送相同的request(){QVector<quint16>values(1, 0);QModbusDataUnit read(QModbusDataUnit::Coils, 128 + m_param->motorID(), values);m_reply[4] = m_modbus->sendReadRequest(read, m_485ID);if(m_reply[4] && !m_reply[4]->isFinished()){connect(m_reply[4], &QModbusReply::finished, [this]() {if(m_reply[4]->error() == QModbusDevice::NoError){m_runState = m_reply[4]->result().values().first();}delete  m_reply[4];m_reply[4] = nullptr;//确保下次可以再次发送request()});}else {delete  m_reply[4];m_reply[4] = nullptr;}}

仍然没有解决问题,内存还是在持续增加。

3.方案三(成功)

感谢这里的内容

https://bugreports.qt.io/browse/QTBUG-92072

问题:

//qmodbusclient_p.h ->enqueueRequest
q->connect(q, &QModbusClient::timeoutChanged,element.timer.data(), QOverload<int>::of(&QTimer::setInterval));

QModbusTCPClient的每次request(无论读写)都会增加这样一个连接。即使销毁了对应的reply,也不能删除该链接,导致内存逐渐增加。

解决:

针对每一次request,手动断开该链接。

m_modbus->disconnect(SIGNAL(timeoutChanged(int)), 0, 0);

一段完整代码:

QModbusReply *reply = m_modbus->sendWriteRequest(m_param->modbusData(topLeft),m_485ID);int id = m_param->index(topLeft.row(), m_param->IDCol).data().toInt();int value = topLeft.data().toInt();QString text = m_param->index(topLeft.row(), m_param->TextCol).data().toString();if(reply && !reply->isFinished()){connect(reply, &QModbusReply::finished, [ = ]() {if(reply->error() == QModbusDevice::NoError){qInfo() << QString("MotorID:%1 Write(%2->%3(%4)) Succeed!\n").arg(m_param->motorID()).arg(value).arg(id).arg(text);}else{qWarning() << QString("MotorID:%1 Write(%2->%3(%4)) Failed!\n").arg(m_param->motorID()).arg(value).arg(id).arg(text);}//响应函数中手动断开连接m_modbus->disconnect(SIGNAL(timeoutChanged(int)), 0, 0);delete  reply;});}else{qWarning() << QString("MotorID:%1 Write(%2->%3(%4)) No Response!\n").arg(m_param->motorID()).arg(value).arg(id).arg(text);
//响应函数中手动断开连接m_modbus->disconnect(SIGNAL(timeoutChanged(int)), 0, 0);delete reply;}

相关文章:

QModbusTCPClient占用内存持续增长

最近使用QModbusTCPClient通信&#xff0c;需要频繁发送读写请求&#xff0c;发现软件占用内存一直在增减&#xff0c;经过不断咨询和尝试&#xff0c;终于解决了。 1.方案一&#xff08;失败&#xff09; 最开始以为是访问太频繁&#xff0c;导致创建reply的对象比delete re…...

代码中使用 Iterable<T> 作为方法参数的解释

/*** 根据课程 id 集合查询课程简单信息* param ids id 集合* return 课程简单信息的列表*/ GetMapping("/courses/simpleInfo/list") List<CourseSimpleInfoDTO> getSimpleInfoList(RequestParam("ids") Iterable<Long> ids); 一、代码解释&…...

Oracle数据库传统审计怎么用

Oracle数据库传统审计怎么用 审计功能开启与关闭By Session还是By AccessWhenever Successful数据库语句审计数据库对象审计查看审计策略和记录Oracle数据库审计功能分为传统审计(Traditional Auditing)和统一审计(Unified Auditing)。统一审计是从Oracle 12c版本开始引入的…...

leetcode-买卖股票问题

309. 买卖股票的最佳时机含冷冻期 - 力扣&#xff08;LeetCode&#xff09; 动态规划解题思路&#xff1a; 1、暴力递归&#xff08;难点如何定义递归函数&#xff09; 2、记忆化搜索-傻缓存法&#xff08;根据暴力递归可变参数确定缓存数组维度&#xff09; 3、严格表结构依…...

MYSQL学习笔记(三):分组、排序、分页查询

前言&#xff1a; 学习和使用数据库可以说是程序员必须具备能力&#xff0c;这里将更新关于MYSQL的使用讲解&#xff0c;大概应该会更新30篇&#xff0c;涵盖入门、进阶、高级(一些原理分析);这一篇是讲解分组、排序、分页查询&#xff0c;并且结合案例进行讲解&#xff1b;虽…...

上位机工作感想-2024年工作总结和来年计划

随着工作年限的增增长&#xff0c;发现自己越来越不喜欢在博客里面写一些掺杂自己感想的东西了&#xff0c;或许是逐渐被工作逼得“成熟”了吧。2024年&#xff0c;学到了很多东西&#xff0c;做了很多项目&#xff0c;也帮别人解决了很多问题&#xff0c;唯独没有涨工资。来这…...

【视觉惯性SLAM:十六、 ORB-SLAM3 中的多地图系统】

16.1 多地图的基本概念 多地图系统是机器人和计算机视觉领域中的一种关键技术&#xff0c;尤其在 SLAM 系统中具有重要意义。单一地图通常用于表示机器人或相机在环境中的位置和构建的空间结构&#xff0c;但单一地图在以下情况下可能无法满足需求&#xff1a; 大规模场景建图…...

【C++笔记】红黑树封装map和set深度剖析

【C笔记】红黑树封装map和set深度剖析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】红黑树封装map和set深度剖析前言一. 源码及框架分析1.1 源码框架分析 二. 模拟实现map和set2.1封装map和set 三.迭代器3.1思路…...

4.若依 BaseController

若依的BaseController是其他所有Controller的基类&#xff0c;一起来看下BaseController定义了什么 1. 定义请求返回内容的格式 code/msg/data 返回数据格式不是必须是AjaxResult&#xff0c;开发者可以自定义返回格式&#xff0c;注意与前端取值方式一致即可。 2. 获取调用…...

vue项目配置多语言

本文详细介绍如何在 Vue 项目中集成 vue-i18n 和 Element-UI &#xff0c;实现多语言切换&#xff1b;首先通过 npm 安装 vue-i18n 和相关语言包&#xff0c;接着在配置文件中设置中文和英文的语言信息&#xff1b;最后在 main.js 中导入并挂载多语言实例&#xff0c;实现切换地…...

数据可视化大屏设计与实现

本文将带你一步步了解如何使用 ECharts 实现一个数据可视化大屏&#xff0c;并且如何动态加载天气数据展示。通过整合 HTML、CSS、JavaScript 以及后端接口请求&#xff0c;我们可以构建一个响应式的数据可视化页面。 1. 页面结构介绍 在此例中&#xff0c;整个页面分为几个主…...

PDF文件提取开源工具调研总结

概述 PDF是一种日常工作中广泛使用的跨平台文档格式&#xff0c;常常包含丰富的内容&#xff1a;包括文本、图表、表格、公式、图像。在现代信息处理工作流中发挥了重要的作用&#xff0c;尤其是RAG项目中&#xff0c;通过将非结构化数据转化为结构化和可访问的信息&#xff0…...

多监控m3u8视频流,怎么获取每个监控的封面图(纯前端)

文章目录 1.背景2.问题分析3.解决方案3.1解决思路3.2解决过程3.2.1 封装播放组件3.2.2 隐形的视频div3.2.3 截取封面图 3.3 结束 1.背景 有这样一个需求&#xff1a; 给你一个监控列表&#xff0c;每页展示多个监控&#xff08;至少12个&#xff0c;m3u8格式&#xff09;&…...

【机器学习实战入门项目】使用深度学习创建您自己的表情符号

深度学习项目入门——让你更接近数据科学的梦想 表情符号或头像是表示非语言暗示的方式。这些暗示已成为在线聊天、产品评论、品牌情感等的重要组成部分。这也促使数据科学领域越来越多的研究致力于表情驱动的故事讲述。 随着计算机视觉和深度学习的进步&#xff0c;现在可以…...

技术洞察:C++在后端开发中的前沿趋势与社会影响

文章目录 引言C在后端开发中的前沿趋势1. 高性能计算的需求2. 微服务架构的兴起3. 跨平台开发的便利性 跨领域技术融合与创新实践1. C与人工智能的结合2. C与区块链技术的融合 C对社会与人文的影响1. 提升生产力与创新能力2. 促进技术教育与人才培养3. 技术与人文的深度融合 结…...

【人工智能 | 大数据】基于人工智能的大数据分析方法

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…...

数字经济时代下的创新探索与实践:以“开源AI智能名片2+1链动模式S2B2C商城小程序源码”为核心

摘要&#xff1a;在数字经济蓬勃发展的今天&#xff0c;中国作为全球数字经济的领航者&#xff0c;正以前所未有的速度推进“数字中国”建设。本文旨在探讨“开源AI智能名片21链动模式S2B2C商城小程序源码”在数字经济背景下的应用潜力与实践价值&#xff0c;从多个维度分析其对…...

【English-Book】Go in Action目录页翻译中文

第8页 内容 前言 xi 序言 xiii 致谢 xiv 关于本书 xvi 关于封面插图 xix 1 介绍 Go 1 1.1 用 Go 解决现代编程挑战 2 开发速度 3 • 并发 3 • Go 的类型系统 5 内存管理 7 1.2 你好&#xff0c;Go 7 介绍 Go 玩具 8 1.3 总结 8 2 Go 快速入门 9 2.1 程序架构 10 2.2 主包 …...

js: 区分后端返回数字是否为null、‘-’ 或正常number类型数字。

问&#xff1a; 这是我的代码<CountTo v-if!isNaN(Number(item.num))> <span v-else>{{item.num}}</span> 我希望不是null的时候走countTo&#xff0c;是null的时候直接<span>{{item.num}}</span>显示 回答&#xff1a; 最终结果&#xff1a; …...

网络变压器的分类

网络变压器是局域网(LAN)中各级网络设备中必备的元件。它们的主要功能是传输数据&#xff0c;增强信号&#xff0c;并提供电气隔离&#xff0c;以防雷保护和匹配阻抗。网络变压器也被称为数据泵或网络隔离变压器。它们广泛应用于网络交换机、路由器、网卡、集线器等设备中。 网…...

解决Windows远程桌面连接Ubuntu时xrdp闪退的配置技巧

1. 问题现象与排查思路 最近在帮同事配置Windows远程连接Ubuntu时遇到了一个典型问题&#xff1a;用Windows自带的远程桌面连接工具输入账号密码后&#xff0c;界面闪退无法进入桌面。这种情况在Ubuntu 18.04/20.04/22.04各版本中都可能出现&#xff0c;特别是使用GNOME桌面环…...

高效解决HTML转Word难题:浏览器端无后端文档转换全方案

高效解决HTML转Word难题&#xff1a;浏览器端无后端文档转换全方案 【免费下载链接】html-docx-js Converts HTML documents to DOCX in the browser 项目地址: https://gitcode.com/gh_mirrors/ht/html-docx-js 在数字化办公场景中&#xff0c;将网页内容快速转换为可编…...

因果模型评估完全手册:Python指标与验证方法详解

因果模型评估完全手册&#xff1a;Python指标与验证方法详解 【免费下载链接】python-causality-handbook 项目地址: https://gitcode.com/gh_mirrors/py/python-causality-handbook 在数据分析和决策科学领域&#xff0c;因果推断模型的评估是确保模型可靠性与实用性的…...

基于NativeAOT的 OpenClaw.NET 深度刨析

&#xff1a;自主智能体架构的演进与原生运行时的瓶颈大型语言模型&#xff08;LLM&#xff09;的快速成熟引发了软件工程领域的底层范式转移。行业焦点已从基于静态提示词&#xff08;Prompt&#xff09;的问答系统&#xff0c;全面转向具备自主规划、工具调用与长程逻辑推理能…...

Spring Boot中UriComponentsBuilder的5个实用技巧:从URL拼接到底层编码原理

Spring Boot中UriComponentsBuilder的5个实用技巧&#xff1a;从URL拼接到底层编码原理 在对接第三方API时&#xff0c;URL的拼接与编码往往是开发者最容易踩坑的环节之一。Spring Boot提供的UriComponentsBuilder工具&#xff0c;不仅能优雅地处理参数拼接&#xff0c;还能解决…...

从零开始:在VMware虚拟机中部署Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF进行开发测试

从零开始&#xff1a;在VMware虚拟机中部署Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF进行开发测试 1. 准备工作与环境搭建 在开始之前&#xff0c;我们需要准备好必要的软件和资源。首先确保你的主机系统满足以下要求&#xff1a; 至少16GB内存&#xff08;推荐…...

3步掌控数字记忆:WeChatMsg工具让你的聊天记录不再流浪

3步掌控数字记忆&#xff1a;WeChatMsg工具让你的聊天记录不再流浪 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCh…...

[OS] Rate Monotonic Scheduling: Optimizing Real-Time Task Prioritization

1. 速率单调调度&#xff1a;实时系统的优先级管理艺术 想象一下急诊室的医生如何决定救治顺序——心跳停止的患者永远优先于感冒发烧的病人。速率单调调度&#xff08;Rate Monotonic Scheduling&#xff0c;RMS&#xff09;就是实时操作系统中的这位"分诊专家"&am…...

微信小程序登录总失败?从‘一次性code’到‘缓存清理’,这份避坑指南帮你全搞定

微信小程序登录全链路排雷手册&#xff1a;从原理到实战的深度解析 登录功能作为微信小程序用户体系的入口&#xff0c;其稳定性直接影响用户体验和业务转化。但在实际开发中&#xff0c;开发者常会遇到各种"诡异"问题——明明按照文档实现了流程&#xff0c;却频繁出…...

3分钟上手!Balena Etcher:安全烧录系统镜像的终极解决方案

3分钟上手&#xff01;Balena Etcher&#xff1a;安全烧录系统镜像的终极解决方案 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 你是否曾因烧录系统镜像而丢失…...