详解 QT 多线程 TCP 文件接收实例

要求:在QT程序中写一个多线程的软件,使用共享内存实现TCP数据接收,发送与处理,三个不同进程间的相互通信,并使用哨兵线程监控各个进程是否出现堵塞。

分析:在 Qt 程序中实现多线程的软件,使用共享内存实现 TCP 数据接收、发送和处理,以及三个不同进程间的相互通信,并使用哨兵线程监控各个进程是否出现堵塞,可以按照以下步骤进行:

  1. 创建三个不同的进程,分别用于 TCP 数据接收、发送和处理。
  2. 在每个进程中使用 QSharedMemory 实现共享内存,用于存储需要传递的数据。
  3. 使用 TCP Socket 在进程间进行数据通信,其中一个进程作为服务器端监听端口,另外两个进程作为客户端连接到服务器端。
  4. 使用哨兵线程监控各个进程是否出现堵塞,当某个进程出现堵塞时进行相应处理。

下面是一个简单的示例代码,演示了如何在 Qt 中实现上述功能:

// TCP 数据接收进程
#include <QCoreApplication>
#include <QTcpServer>
#include <QTcpSocket>
#include <QSharedMemory>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QTcpServer server;if (!server.listen(QHostAddress::Any, 1234)) {qDebug() << "Failed to start server.";return -1;}qDebug() << "Server started, listening on port 1234";// 创建共享内存用于存储接收到的数据QSharedMemory sharedMemory("ReceivedData");sharedMemory.create(sizeof(QByteArray));return a.exec();
}
// TCP 数据发送进程
#include <QCoreApplication>
#include <QTcpSocket>
#include <QSharedMemory>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 连接服务器端QTcpSocket socket;socket.connectToHost("localhost", 1234);if (!socket.waitForConnected()) {qDebug() << "Failed to connect to server.";return -1;}qDebug() << "Connected to server.";// 创建共享内存用于存储要发送的数据QSharedMemory sharedMemory("ToSendData");sharedMemory.create(sizeof(QByteArray));return a.exec();
}
// TCP 数据处理进程
#include <QCoreApplication>
#include <QTcpSocket>
#include <QSharedMemory>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 连接服务器端QTcpSocket socket;socket.connectToHost("localhost", 1234);if (!socket.waitForConnected()) {qDebug() << "Failed to connect to server.";return -1;}qDebug() << "Connected to server.";// 创建共享内存用于存储接收到的数据QSharedMemory sharedMemory("ReceivedData");if (!sharedMemory.attach()) {qDebug() << "Failed to attach to shared memory.";return -1;}return a.exec();
}
// 哨兵线程
#include <QCoreApplication>
#include <QTimer>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建哨兵定时器,每隔一段时间检查各个进程是否出现堵塞QTimer sentinelTimer;sentinelTimer.setInterval(5000); // 设置定时器间隔为5秒QObject::connect(&sentinelTimer, &QTimer::timeout, []() {// 检查各个进程是否出现堵塞,并进行相应处理qDebug() << "Sentinel thread checking...";});sentinelTimer.start();return a.exec();
}

以上是一个简单的示例,实现了 TCP 数据接收、发送和处理的三个进程,以及一个哨兵线程用于监控各个进程是否出现堵塞。你需要根据实际情况对代码进行适当修改和完善。

参考:

详解 QT 多线程 TCP 文件接收服务器实例:https://www.51cto.com/article/272733.html
Qt学习之路-进程间通信共享内存:https://blog.51cto.com/u_15329836/5091882

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/725430.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Idea 开启热部署 Devtools

一、背景 当我们在 idea 中修改代码的时候&#xff0c;idea 并不会自动的重启去响应我们修改的内容&#xff0c;而是需要我们手动的重新启动项目才可以生效&#xff0c;这个是非常不方便&#xff0c;但是可以在 idea 中开启这个自动热部署的功能。 我的 idea 版本为 2022.3.3 。…

Spring MVC RequestMappingHandlerMapping原理解析

在Spring MVC框架中&#xff0c;路由机制是实现HTTP请求到具体处理器方法映射的核心。RequestMappingHandlerMapping是Spring MVC中用于处理此类映射的核心组件。与SimpleUrlHandlerMapping不同&#xff0c;RequestMappingHandlerMapping是基于注解驱动的&#xff0c;它利用Req…

C++STL【list链表】

list 1. list介绍 list文档&#xff08;非官方&#xff09; 官方文档list是双向带头循环链表&#xff0c;它可以在常数范围内的任意位置进行插入和删除操作。list的迭代器是双向迭代器(bidirectional iterator)&#xff0c;它可以前后双向迭代。 由容器的底层结构决定&#xf…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之RowSplit容器组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之RowSplit容器组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、RowSplit容器组件 将子组件横向布局&#xff0c;并在每个子组件之间插入一…

数据处理分类、数据仓库产生原因

个人看书学习心得及日常复习思考记录&#xff0c;个人随笔。 数据处理分类 操作型数据处理&#xff08;基础&#xff09; 操作型数据处理主要完成数据的收集、整理、存储、查询和增删改操作等&#xff0c;主要由一般工作人员和基层管理人员完成。 联机事务处理系统&#xff…

Spring MVC HandlerMethodArgumentResolver原理解析

在Spring MVC框架中&#xff0c;HandlerMethodArgumentResolver接口扮演着非常重要的角色。它负责解析请求中的参数&#xff0c;并将其转换为处理器方法所需要的参数值。这种解析过程确保了HTTP请求的参数能够被正确地传递给后端控制器&#xff0c;从而实现请求到处理器方法的绑…

网民用户身份信息实名认证-身份证号+姓名实名认证 GO语言接口代码

翔云身份证二要素实名认证接口&#xff0c;是保护网民数字身份安全的重要防线&#xff0c;更是人们心中守护信息安全的坚实盾牌。有效阻止了网民信息泄露。 以下是go语言调用翔云身份证号实名认证API的代码&#xff1a; package mainimport ("fmt""bytes"…

Common Sense Machines(CSM):立志成为图像生成适用于游戏引擎的3D资产AI产品

详细说明 Common Sense Machines&#xff08;CMS&#xff09;&#xff1a;立志成为图像生成适用于游戏引擎的3D资产AI产品-喜好儿aigc详细说明&#xff1a;https://heehel.com/CSM-3d 官方网站&#xff1a;https://www.csm.ai/ 使用体验网址&#xff1a;https://3d.csm.ai/ 来…

lowcode-engine接入编辑器

https://lowcode-engine.cn/site/docs/guide/create/useEditor 方案1 pnpm init pnpm add "alilc/create-elementlatest"pnpm create "alilc/element" editor-project-name选择编辑器 进入执行pnpm install命令安装包 pnpm start报错 pnpm add &qu…

苹果曝出两个 iOS 系统 0-Day 漏洞

最近&#xff0c;苹果公司发布了紧急安全更新&#xff0c;解决了两个 iOS 零日漏洞。这些漏洞存在于 iOS 内核&#xff08;CVE-2024-23225&#xff09;和 RTKit&#xff08;CVE-2024-23296&#xff09;中&#xff0c;威胁攻击者可利用其绕过内核内存保护&#xff0c;这就给了具…

解决vue项目本地开发完成后部署到服务器后报404的问题

一、如何部署 前后端分离开发模式下&#xff0c;前后端是独立布署的&#xff0c;前端只需要将最后的构建物上传至目标服务器的web容器指定的静态目录下即可 我们知道vue项目在构建后&#xff0c;是生成一系列的静态文件 常规布署我们只需要将这个目录上传至目标服务器即可 /…

linux循环之while循环

1.while循环语法 while 循环控制条件 do commands done #这种结构在循环的开头判断循环控制条件是否满足&#xff0c;如果条件一直满足&#xff0c;那么就一直循环下去。与for循环的区别是&#xff0c;while循环更适合在循环次数未知的情况下使用。 2.while循环案例 [ro…

ChatGPT提问技巧——控制温度和TOP-P样本

ChatGPT提问技巧——控制温度和TOP-P样本 “控制温度和Top-P抽样”在自然语言处理中&#xff0c;控制温度是指通过调整生成文本的随机性和多样性&#xff0c;而Top-P抽样是一种生成文本的策略&#xff0c;它选择概率最高的前P个词作为候选词汇。这两个技术常用于生成文本的质量…

Android学习笔记 Dialog

## Android Dialog 基础用法 Dialog 类是对话框的基类&#xff0c;但应该避免直接实例化 Dialog&#xff0c;而应使用其子类&#xff0c;比如 AlertDialog。此类对话框可以显示标题、提示信息、按钮、可选择项列表或自定义布局等。另外还有 DatePickerDialog 或 TimePickerDia…

文本溢出隐藏 显示省略号,鼠标悬浮展示 el-tooltip(TooltipIsShowMixin封装)

目录 mixins 封装使用 TooltipIsShowMixin效果展示 mixins 封装 TooltipIsShowMixin.js export const TooltipIsShowMixin {data() {return {tooltipIsShow: false}},methods: {tooltipIsDisHandler(className) {this.$nextTick(() > {const dom document.querySelector…

golang 糟糕的错误处理

关于golang的糟糕错误处理&#xff0c;我持反对意见&#xff0c;因此写个博客记录一下 golang的书中说&#xff1a;像下面代码一样&#xff0c;创建一个布尔型变量用于测试错误条件是多余的&#xff1a; 然而在个人看来&#xff0c;代码非常完美&#xff0c;言简意赅&#xff0…

PDF处理控件aspose.PDF功能演示:将 PDF 转换为 Word 文档

在 Web 应用程序中处理文档时&#xff0c;将 PDF 文件无缝转换为 Word 文档的能力是一项宝贵的资产。此任务不仅常见&#xff0c;而且对于文档转换器和编辑器、从编辑和协作到内容提取的各种应用程序来说也是必不可少的。在这篇博文中&#xff0c;我们将探讨如何使用 JavaScrip…

算法中常用知识

定义大值和小值 NT_MIN在标准头文件limits.h中定义。 #define INT_MAX 2147483647 #define INT_MIN (-INT_MAX - 1) int ans INT_MIN;在C/C语言中&#xff0c;不能够直接使用-2147483648来代替最小负数&#xff0c;因为这不是一个数字&#xff0c;而是一个表达式。表达式的意…

JVM性能优化之--JIT即时编译

如果我们想将源Java文件运行&#xff0c;需要进行如下步骤&#xff1a; 使用类加载器将Java文件实时编译成class文件&#xff0c;也就是字节码指令使用JVM将编译后的字节码指令&#xff0c;解释为机器码&#xff0c;这是计算机可以直接执行的指令计算机直接执行 但是这其中由…

挑战杯 基于深度学习的植物识别算法 - cnn opencv python

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的植物识别算法 ** …