QT开发笔记(继承 QObject 的线程 )

2023-05-16

继承 QObject 的线程

在第 10 章章节开头已经说过,继承 QThread 类是创建线程的一种方法,另一种就是继承

QObject 类。继承 QObject 类更加灵活。它通过 QObject::moveToThread()方法,将一个 QObeject

的类转移到一个线程里执行。恩,不理解的话,我们下面也画个图捋一下。在这里插入图片描述
通过上面的图不难理解,首先我们写一个类继承 QObject,通过 QObject::moveToThread()

方法将它移到一个 QThread 线程里执行。那么可以通过主线程发送信号去调用 QThread 线程的
方法如上图的 fun4(),fun5()等等。这些方法都是在 QThread 线程里执行的。

应用实例 本例目的:快速了解继承 QObject类线程的使用。 例 06_qthread_example2,继承 QObject类的线程(难度:一般)。项目路径为Qt/2/06_qthread_example2。本例通过 QObject类继承线程,然后在 MainWindow类里使用。通过点击一个按钮开启线程。另一个按钮点击关闭线程。另外通过加锁的操作来安全的终止一个线程。(我们可以通过 QMutexLocker可以安全的使用 QMutex以免忘记解锁。) 在我们谈谈为什么需要加锁来终止一个线程?因为 quit()和 exit()方法都不会中途终止线程。要马上终止一个线程可以用 terminate()方法。但是这个函数存在非常不安全的因素,Qt官方文档说不推荐使用。 我们可以添加一个 bool变量,通过主线程修改这个 bool变量来终止,但是有可能引起访问冲突,所以需要加锁,例程里可能体现不是那么明确,当我们有 doWork1(),doWork2…就能体现到 bool变量加锁的作用了。但是加锁会消耗一定的性能,增加耗时。 下面的例子是仿照 Qt官方写的,看似简单,但是流程大家可能不是很明白,所以画个了大体的流程图,给大伙瞧瞧。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT开发笔记(继承 QObject 的线程 ) 的相关文章

  • 并行编程实现矩阵乘法优化

    实现四种矩阵乘法程序 xff0c 并对比运行效率 1 xff09 串行算法 2 xff09 Catch优化 3 xff09 SSE版本 4 xff09 分片策略 span class token macro property span cl
  • c++的函数reserve()和unique()和sort()

    函数reserve span class token comment vector reserve span span class token macro property span class token directive keywor
  • 关于c中代码加 ‘\‘ 进行换行的说明

    我们在c与c 43 43 中经常会遇到一种情况就是加 进行换行来保持代码整体结构一致的使用情况 xff0c 那么具体来说换行的规则是什么 xff0c 这里进行一下记录 span class token macro property span
  • git的命令总结

    先把清单列出来git cheat sheet git 命令总结 git的init和git clonegit add和git commit 提交二连git checkout 反向操作git reset 回退HEAD指针git revert 同
  • 宏定义中的可变参数 __VA_ARGS__ 用法 与 #和##的用法

    首先了解一下可变参数 span class token macro property span class token directive keyword include span span class token string lt st
  • C++结构体简单链表原理解释

    对结构体简单链表原理的简单解释 xff0c 程序如下 xff1a struct lianbiao int no string name struct lianbiao next lianbiao head 61 nullptr tail 6
  • linux小连招

    Linux命令目录 查看当前shell的种类find命令查找文件 查看当前shell的种类 查看当前发行版可以使用的shell xff1a chao 64 chao span class token function cat span et
  • 侵略性奶牛(对于二分的总结)

    题目 Farmer John has built a new long barn with N 2 lt 61 N lt 61 100 000 stalls The stalls are located along a straight l
  • To Fill or Not to Fill(贪心算法)

    题目描述 有了高速公路 xff0c 开车从杭州到任何其他城市都很容易 但由于汽车的油箱容量有限 xff0c 我们必须不时地在路上找到加油站 不同的加油站可能会给出不同的价格 你被要求仔细设计最便宜的路线去 输入描述 对于每个测试实例 第一行
  • cmake语法

    目录 基本语法命令行projectadd executabletarget sourcessetfileadd librarymessagetarget link librariestarget include directoriesfin
  • 《C++个人学习笔记》使用cout或cin显示未定义标识符

    在vs自动生成的c 43 43 项目中 xff0c 初次使用cout或cin报未定义标识符错误 xff0c 是由于未声明命名空间的原因 解决方法 xff1a 在头文件中声明全局命名空间 加入 using namespace std 表示使用
  • rosbag error

    rosbag play 报错 error 1 md5sum span class token punctuation span span class token constant ERROR span span class token pu
  • CMake实践(三)静态库和动态库构建

    本节的任务是 xff1a 建立一个静态库和动态库 xff0c 提供HelloFunc函数供其他程序使用 xff0c HelloFunc函数向终端输出Hello World字符串 安装头文件和共享库 1 准备工作 在 backup cmake
  • checksum算法详细的计算方法、实现思路与python校验验证

    1 checksum是什么 xff1f Checksum xff1a 电脑 总和检验码 xff0c 校验和 在数据处理和数据通信领域中 xff0c 用于校验目的的一组数据项的和 这些数据项可以是数字或在计算检验总和过程中看作数字的其它字符串
  • java循环标号

    在Java中 xff0c 要想跳出多重循环 xff0c 可以在外面的循环语句前定义一个标号 xff0c 然后在里层循环体的代码中使用带有标号的break 语句 xff0c 即可跳出外层循环 switch xff08 continue和bre
  • SQL Server安装提示【需要microsoft.NET Framework 3.5 Service Pack 1】

    问题 我在自己电脑安装SQL Server 2014 的时候遇到了这个问题 xff0c SQL Server安装提示 需要microsoft NET Framework 3 5 Service Pack 1 xff1a 解决方法 1 打开控
  • zcu102_12_Standalone以太网数据的UDP传输

    本文在PS的Standalone程序中使用lwip库通过UDP协议实现网络数据传输 包含UDP Server和UDP Client两种形式 本文主要参考lwip的SDK内部说明和工程模板 xff0c xapp1026 xapp1306 SD
  • SQL Server 2014无法连接到服务器之解决方法

    问题如图所示 xff1a 解决方法 1 打开SQL server 配置管理器 gt SQL server 网络配置 gt MSSQLSERVER的协 xff0c 将SQLEXPRESS协议中的Named Pipes改为已启用 xff1a 2
  • C语言实现顺序表删除多余元素并统计移动次数

    题目 xff1a 假设顺序表L中的元素按从小到大的次序排列 xff0c 设计算法以删除表中重复的元素 用C写 xff0c 对顺序表 xff08 1 1 2 2 2 3 4 5 5 5 6 6 7 7 8 8 8 9 xff09 模拟执行本算
  • C语言实现十进制转换为十六进制

    编写了C语言程序 xff0c 实现了十进制数到十六进制数的转换 代码 xff1a include lt stdio h gt int main int a i 61 0 char s 200 printf 34 请输入十进制数字 xff1a

随机推荐