开源 C++ QT Widget 开发(七)线程--多线程及通讯

 文章的目的为了记录使用C++ 进行QT Widget 开发学习的经历。临时学习,完成app的开发。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。

  相关链接:

开源 C++ QT Widget 开发(一)工程文件结构-CSDN博客

开源 C++ QT Widget 开发(二)基本控件应用-CSDN博客

开源 C++ QT Widget 开发(三)图表--波形显示器-CSDN博客

开源 C++ QT Widget 开发(四)文件--二进制文件查看编辑-CSDN博客

 开源 C++ QT Widget 开发(五)通讯--串口调试-CSDN博客

开源 C++ QT Widget 开发(六)通讯--TCP调试-CSDN博客


推荐链接:

开源 java android app 开发(一)开发环境的搭建-CSDN博客

开源 java android app 开发(二)工程文件结构-CSDN博客

开源 java android app 开发(三)GUI界面布局和常用组件-CSDN博客

开源 java android app 开发(四)GUI界面重要组件-CSDN博客

开源 java android app 开发(五)文件和数据库存储-CSDN博客

开源 java android app 开发(六)多媒体使用-CSDN博客

开源 java android app 开发(七)通讯之Tcp和Http-CSDN博客

开源 java android app 开发(八)通讯之Mqtt和Ble-CSDN博客

开源 java android app 开发(九)后台之线程和服务-CSDN博客

开源 java android app 开发(十)广播机制-CSDN博客

开源 java android app 开发(十一)调试、发布-CSDN博客

开源 java android app 开发(十二)封库.aar-CSDN博客

推荐链接:

开源C# .net mvc 开发(一)WEB搭建_c#部署web程序-CSDN博客

开源 C# .net mvc 开发(二)网站快速搭建_c#网站开发-CSDN博客

开源 C# .net mvc 开发(三)WEB内外网访问(VS发布、IIS配置网站、花生壳外网穿刺访问)_c# mvc 域名下不可訪問內網,內網下可以訪問域名-CSDN博客

开源 C# .net mvc 开发(四)工程结构、页面提交以及显示_c#工程结构-CSDN博客

开源 C# .net mvc 开发(五)常用代码快速开发_c# mvc开发-CSDN博客

本章主要内容:Qt框架的多线程示例程序,主要展示了线程间通信的实现方式

一、源码分析  

1.1  线程类定义
MyThread类:

继承自QThread

包含两个信号:sendTime(QString)和firstTOsecond(QString)

run()方法中每秒发送一次时间信号和数字信号

SecondThread类:

同样继承自QThread

包含信号sendTime(QString)和槽函数dealfirstTOsecond(QString)

run()方法中每秒发送一次时间信号

1.2  主窗口类(MainWindow)
创建并管理两个线程

设置线程间的信号-槽连接

启动两个线程

多线程通信分析
线程间通信方式:
子线程 → 主线程:

firstThread::sendTime → MainWindow::firstSlot

seThread::sendTime → MainWindow::secondSlot

子线程 → 子线程:

firstThread::firstTOsecond → SecondThread::dealfirstTOsecond

线程执行流程:
MyThread线程:

每100ms循环一次

发送当前时间给主线程

发送数字"123"给SecondThread线程

SecondThread线程:

每1000ms循环一次

发送当前时间给主线程

接收并处理来自MyThread的数据

二、所有源码

2.1  mainwindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <mythread.h>
#include <secondthread.h>
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();MyThread * firstThread;SecondThread * seThread;
private:Ui::MainWindow *ui;
private slots:void firstSlot(QString t);void secondSlot(QString t);};#endif // MAINWINDOW_H

2.2  mainwindow.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
/*程序包括1个主线程,2个子线程。实现子线程发送数据给主线程,子线程发送数据给子线程。* */
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);firstThread = new MyThread;//connect(firstThread,SIGNAL(sendTime(QString)),this,SLOT(firstSlot(QString)));connect(firstThread,&MyThread::sendTime,this,&MainWindow::firstSlot);seThread = new SecondThread;//connect(firstThread,SIGNAL(sendTime(QString)),this,SLOT(firstSlot(QString)));connect(seThread,&SecondThread::sendTime,this,&MainWindow::secondSlot);connect(firstThread,&MyThread::firstTOsecond,seThread,&SecondThread::dealfirstTOsecond);firstThread->start();seThread->start();}
void MainWindow::firstSlot(QString t)
{qDebug()<<"firstSlot"<<t;
}
void MainWindow::secondSlot(QString t)
{qDebug()<<"secondSlot"<<t;
}MainWindow::~MainWindow()
{delete ui;
}

2.3  mythread.h文件

#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>
#include <QObject>
#include <QDebug>
#include <QTime>
class MyThread : public QThread
{Q_OBJECT
public:MyThread();
protected:void run();
signals:void sendTime(QString);void firstTOsecond(QString);
};#endif // THREAD1_H

2.4  mythread.cpp文件

#include "mythread.h"MyThread::MyThread()
{qDebug()<<"Thread Start!"<<currentThreadId();
}
void MyThread::run()
{int i = 0;QString str;while(1){qDebug()<<"first Run()!"<<currentThreadId();QString t = QTime::currentTime().toString("hh:mm:ss");//qDebug()<<i<<":"<<QDateTime::currentDateTime();emit sendTime(t);str = QString::number(i,10);emit firstTOsecond("123");msleep(100);  // 延迟1s 凸显效果}
}

2.5  secondthread.h文件

#ifndef SECONDTHREAD_H
#define SECONDTHREAD_H
#include <QThread>
#include <QObject>
#include <QDebug>
#include <QTime>
#include <QEvent>
#include <QCoreApplication>
class SecondThread : public QThread
{Q_OBJECT
public:SecondThread();protected:void run();
signals:void sendTime(QString);
public slots:void dealfirstTOsecond(QString t);
};#endif // THREAD1_H

2.6  sencondthread.cpp文件

#include "secondthread.h"SecondThread::SecondThread()
{qDebug()<<"Thread Start!"<<currentThreadId();
}
void SecondThread::run()
{int i = 0;while(1){qDebug()<<"second Run()!"<<currentThreadId();QString t = QTime::currentTime().toString("hh:mm:ss");//qDebug()<<i<<":"<<QDateTime::currentDateTime();emit sendTime(t);msleep(1000);  // 延迟1s 凸显效果}
}
void SecondThread::dealfirstTOsecond(QString t)
{qDebug()<<"deal"<<t;
}

三、显示效果

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

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

相关文章

CPU-IO-网络-内核参数的调优

CPU-IO-网络-内核参数的调优CPU-IO-网络-内核参数的调优一、CPU 资源调优1.1 调整进程优先级&#xff08;nice 值&#xff09;1.2 设置 CPU 亲和力&#xff08;taskset&#xff09;1.3 cpu命令描述1.4 使用 vmstat 分析系统瓶颈二、磁盘 I/O 调优2.1 ulimit 资源限制2.2 测试磁…

JavaScript 实战进阶:工程化、性能与未来展望

一、JavaScript 工程化实践 随着前端项目规模的扩大&#xff0c;“工程化”成为提升开发效率、保证代码质量的核心手段。它涵盖模块化设计、构建工具链、代码规范与测试等多个维度。 &#xff08;一&#xff09;模块化开发 模块化是将复杂代码拆分为可复用、可维护的独立单元的…

破局与增长:全球电商的业财一体化战略与数字化未来

一、全球电商的数字化转型背景在瞬息万变的全球电商市场中&#xff0c;数字化转型已经成为企业保持竞争力的必由之路。近年来&#xff0c;国内品牌出海企业快速扩张&#xff0c;业务范围覆盖数十个国家和平台。然而&#xff0c;随着规模的几何级增长&#xff0c;行业普遍面临以…

Excel怎么换行?3种单元格内换行方法?【图文详解】Excel自动换行?Alt+Enter?

一、问题背景 在日常使用 Excel 处理数据时&#xff0c;很多人会遇到这样的困扰&#xff1a;输入长文本&#xff08;比如产品说明、多行备注、地址信息等&#xff09;时&#xff0c;文字会一直横向延伸&#xff0c;不仅导致单元格变宽、表格排版混乱&#xff0c;还可能遮挡相邻…

【生产实践】局域网多服务器多用户SSH登录批量测试(附完整shell脚本)

在企业运维场景中&#xff0c;局域网内多台服务器的SSH登录凭据&#xff08;用户名/密码&#xff09;验证是高频需求——无论是新服务器部署后的凭据校验&#xff0c;还是定期安全巡检中的凭据有效性检查&#xff0c;手动逐台逐用户测试不仅效率低下&#xff0c;还容易出错。 本…

专题:2025人工智能2.0智能体驱动ERP、生成式AI经济现状落地报告|附400+份报告PDF、原数据表汇总下载

原文链接&#xff1a;https://tecdat.cn/?p43713 2025年&#xff0c;人工智能正从技术概念快速渗透到产业实操层面——大模型推理能力的突破让复杂任务自动化成为可能&#xff0c;AI代理的规模化应用重构企业效率边界&#xff0c;而AI企业“天生全球化”的特性更是打破了传统创…

机器学习--支持向量机

目录 一、为什么需要 SVM&#xff1f;先解决 “怎么分才好” 的问题 二、SVM 的核心&#xff1a;什么是 “最好的超平面”&#xff1f;用 “间隔” 说话 1. 先搞懂两个关键概念 2. 目标&#xff1a;把 “间隔” 拉到最大 三、从 “想要最大间隔” 到 “解数学问题”&#…

Multi-output Classification and Multi-label Classification|多输出分类和多标签分类

----------------------------------------------------------------------------------------------- 这是我在我的网站中截取的文章&#xff0c;有更多的文章欢迎来访问我自己的博客网站rn.berlinlian.cn&#xff0c;这里还有很多有关计算机的知识&#xff0c;欢迎进行留言或…

【目标检测】论文阅读5

Small-object detection based on YOLOv5 in autonomous driving systems 发表期刊&#xff1a;Pattern Recognition Letters&#xff1b;发表时间&#xff1a;2023年 论文地址 摘要 随着自动驾驶领域的快速发展&#xff0c;对更快、更准确的目标检测框架的需求已经成为必要。…

Playwright进阶指南 (6) | 自动化测试实战

2025企业级测试解决方案&#xff1a;从单测到千级并发&#xff0c;打造高可用测试体系一、为什么传统自动化测试难以落地&#xff1f;根据2025年最新行业调研&#xff0c;测试项目失败的三大核心原因&#xff1a;失败原因占比典型表现维护成本过高45%选择器频繁失效&#xff0c…

uv 简单使用

二进制安装 powershell -ExecutionPolicy Bypass -c "irm https://ghproxy.cn/https://github.com/astral-sh/uv/releases/download/0.8.13/uv-installer.ps1 | iex"版本号&#xff1a;0.8.13&#xff0c;自行更改github加速前缀&#xff1a;https://ghproxy.cn/ 配置…

Linux程序管理

目录 一、Linux程序与进程 1、程序,进程,线程的概念 2、程序和进程的区别 3、进程和线程的区别 二、Linux进程基础(生命周期) 1、进程生命周期 2、父子进程的关系 三、程序管理 1、课程目标 2、常见的软件包类型 3、安装方法 使用独立的rpm包安装 rpm包的命名方法…

Linux-进程替换exec

文章目录进程替换exec 函数族使用说明查看命令的路径 which测试 execl测试 execlp测试 execv测试 execvp进程替换 概述 在 Windows 平台下&#xff0c;我们可以通过双击运行可执行程序&#xff0c;让这个可执行程序成为一个进程&#xff1b;而在 Linux 平台&#xff0c;我们可…

Seaborn数据可视化实战:Seaborn数据可视化实战入门

Seaborn数据可视化实战&#xff1a;从数据到图表的完整旅程 学习目标 通过本课程的学习&#xff0c;你将能够掌握使用Seaborn进行数据可视化的完整流程&#xff0c;从数据准备到图表设计&#xff0c;再到最终的图表呈现。本课程将通过一个具体的项目案例&#xff0c;帮助你全面…

控制系统仿真之时域分析(二)

一、时域分析法时域分析法是从传递函数出发直接在时域上研究控制系统性能的方法&#xff0c;实质上是研究系统在某典型输入信号下随时间变化的曲线&#xff0c;从而分析系统性能。控制系统的时域响应决定于系统本身的参数和结构&#xff0c;还有系统的初始状态&#xff0c;以及…

PDF 表单创建与分发

PDF 表单是一种交互式文档&#xff0c;允许用户填写信息、做出选择并提交数据。与静态 PDF 不同&#xff0c;PDF 表单包含可交互的字段元素&#xff0c;如文本框、复选框、单选按钮等。#mermaid-svg-sZe9We4UG0yKymyl {font-family:"trebuchet ms",verdana,arial,san…

Guava 简介:让 Java 开发更高效

Guava 简介&#xff1a;让 Java 开发更高效 Guava 是由 Google 开源的 Java 库&#xff0c;旨在为开发者提供一系列实用的工具类&#xff0c;以提高开发效率。它包含了集合类、缓存、并发工具、字符串处理等实用方法。 Guava 的常用场景 集合处理&#xff1a;Guava 提供了多种扩…

「ECG信号处理——(24)基于ECG和EEG信号的多模态融合疲劳分析」2025年8月23日

目录 一、引言 二、核心原理 2.1 心电 HRV 疲劳关联原理 2.2 脑电 EEG 疲劳关联原理 2.3 疲劳综合指数 三、数据处理流程 四、结果展示与分析 参考文献 一、引言 针对作业安全&#xff08;如驾驶、精密操作&#xff09;场景下的疲劳状态实时监测需求&#xff0c;本文提…

EXCEL自动调整列宽适应A4 A3 A2

Public xlPaperA2%Sub 填满页面排版()xlPaperA2 66 A2编号66Dim ws As Worksheet: Set ws ActiveSheetDim FirstCol As Long, LastCol As Long, LastRow As LongDim TargetRange As RangeDim UsablePageWidth As DoubleDim CurrentWidth As DoubleDim StartFontSize As Doubl…

Linux系统性能优化全攻略:从CPU到网络的全方位监控与诊断

引言 在Linux系统运维和开发过程中&#xff0c;系统性能优化是一个永恒的话题。无论是服务器负载过高&#xff0c;还是应用程序响应缓慢&#xff0c;准确快速地定位问题根源至关重要。本文将全面介绍Linux系统中常用的性能诊断工具和方法&#xff0c;帮助您从CPU、内存、磁盘I/…