Qt多线程编程

article/2025/10/27 17:03:56

       由于疫情原因被封控在家,相信大家也有跟我类似的情况,在学习知识提升和充实自己,下面我将这几天在学习的Qt多线程编程做个简单的总结,随此笔记的还有几个简单的例子,以便后续开发过程中回忆和参考。

        Qt的多线程开发,目前学习了有4种方法,按照我目前的学习顺序,简单做下介绍,分别是:

        一、继承QThread,重写run函数,在run函数内实现自己的耗时逻辑代码:

                 代码块:

                              

        最早接触的Qt多线程编程方式,优点:编码简单;缺点:功能单一,对于业务复杂的情况下,需要多个QThread子类,(仅是个人见解,如有不妥欢迎指正)。

        二、像平时我们写功能类一样,继承QObject,将多个业务处理逻辑分别写成不同的槽函数:

                 代码块:

        子线程的两个处理槽函数:

        使用代码:

         通过moveToThread的方式将我们业务处理类放到子线程中,通过信号的方式触发业务处理类中的槽函数,具体的可以看附件的代码。

        三、Qt线程池,需要我们继承QRunnable,值得注意的是QRunnable不是QObject的派生类,所以单独的继承QRunnable的话,没办法使用Qt的信号槽机制,如果有业务要求,可以采用双重继承的方式达到对外发送信号的效果。

        代码块:继承QRunnable也是在run函数中实现逻辑,如果业务复杂也可以将相对独立的功能代码用独立的函数实现,run中调用即可。     

         使用代码块:通过QThreadPool::globalInstance()得到全局的线程池对象,通过start接口将我们实例化的子线程处理类对象交给独立的线程。

         这里要注意几点:

        1.创建子线程处理类的时候不可以指定parent,不然会报跨线程处理的错误!

        2.QThreadPool默认是自动回收我们的子类对象,当我们的run函数处理完以后。如果不希望QThreadPool自动回收我们的子类对象的话,通过QRunnable的setAutoDelete(false)实现。

        3.通过QThreadPool的setMaxThreadCount()接口来达到线程池最大线程数量的设置,查看Qt的帮助文档我们可以得知,默认的数量是通过QThread::idealThreadCount()接口返回的即系统上可以运行的最理想的线程数量。

         四、通过QtConcurrent将一个函数放到独立的线程中执行:

        代码块:

        1.无参数的函数:

        2.有参数的函数:       

        通过这么一调用,我们就能将“subThreadFunction”函数放到独立的线程中去执行了。

资源地址:(2条消息) Qt多线程编程实例,资源包含了4种多线程编程的简单实例-C++文档类资源-CSDN文库

最后,文章中介绍到的实例已上传到CSDN资源,开放下载,对于初学者,希望能够达到抛砖引玉的效果,对于大佬,欢迎指正。


http://chatgpt.dhexx.cn/article/Z1FFnyiD.shtml

相关文章

Qt多线程

Qt多线程有两种方法: 1、定义一个QThread的派生类,重写run函数,run函数中的程序就是新线程中要执行的内容。在主线程中实例化该类,调用start函数,就可以实现多线程。 2、定义一个QObject的派生类,把要在新线…

Qt创建多线程的两种方法

来源:https://github.com/czyt1988/czyBlog/tree/master/tech/QtThread 1.摘要 Qt有两种多线程的方法,其中一种是继承QThread的run函数,另外一种是把一个继承于QObject的类转移到一个Thread里。 Qt4.8之前都是使用继承QThread的run这种方法…

Qt----多线程

文章目录 多线程一、继承QThread的线程1. 应用实例2. 程序运行效果 二、继承QObject的线程1. 应用实例2. 程序运行效果 多线程 我们写的一个应用程序,应用程序跑起来后一般情况下只有一个线程,但是可能也有特殊情况。比如我们前面章节写的例程都跑起来后…

Qt5教程(九):Qt多线程

目录: 一、创建工程 二、QThread 源码一览 三、QThread相关方法介绍 四、创建线程 一、创建工程 先创建一个工程吧, 具体步骤前面讲过很多次了, 就不再细说了。 然后在Header文件夹下创建添加一个头文件, 右键Headers -> Add New... -> C -&g…

Qt 多线程的几种实现方式

Qt多线程的实现方式有: 1. 继承QThread类,重写run()方法 2. 使用moveToThread将一个继承QObject的子类移至线程,内部槽函数均在线程中执行 3. 使用QThreadPool,搭配QRunnable(线程池) 4. 使用QtConcurrent&#xf…

QT中的多线程

目录 1、QThread介绍 1.2、继承Qthread类 1.2.1、得到线程id 1.2.2、让线程一直执行 1.2.3、线程退出 1.2.4、​​​​​​​connect的第五个参数 1.2.5、线程锁 QMutex ​​​​​​​ 1、QThread介绍 QThread类提供了一个与平台无关的管理线程的方法。一个QThread对…

faild to create process解决办法

win7下运行pip时报faild to create process的解决办法: 1.找到python.exe文件,复制其文件路径。如下图,python.exe路径为D:\interpreter\python.exe。 2.找到pip-script.py文件,打开。将步骤1中复制的路径粘贴在第一行&#xff0…

CreateProcess error=2, 系统找不到指定的文件 解决方法

CreateProcess error2, 系统找不到指定的文件 解决方法 一般这是由于ndk缺少文件引起的 解决方法1: 在项目根目录下的local.properties文件中加cmd后缀 方法二下载16b的版本替换原来的ndk-bundle目录,默认在C:\Users\用户名\AppData\Local\Android\S…

SQL SERVER 2008 执行xp_cmdshell的过程中出错,调用createprocess失败,错误代码 5 解决方案

1、进入 控制面板----管理工具------本地安全策略 点击 本地策略--------安全选项 把“网络安全:LAN管理器身份验证级别”双击打开,选择“发送 LM 和 NTLM 响应”(原来是“没有定义”)。确认后,重新启动服务器,该问题…

runnerw.exe: CreateProcess failed with error 5:

在idea配置Git时遇到这个问题: 后来发现是我路径设置错了: 解决方案 修改设置里的路径即可(Setings-Version Control-Git)

Qt creater出现“启动程序失败,路径或者权限错误”或“The process could not be started!”解决方法

Qt creater出现“启动程序失败,路径或者权限错误”或“The process could not be started!”解决方法 错误示例 远古版本的QTCreator在编译程序时没问题,在运行程序时会提示“The process could not be started!" 较新版本…

failed to create process.

由于python-2.7是先出来,但是官方只更新到2020年1月1日;而python-3.6与python-2.7有一定的差别,会同时在电脑上安装这两个版本的python,为了能更好的调用python不同的版本,会设定一个执行时使用python2.exe&#xff0c…

CreateProcessAsUser

该CreateProcessAsUser函数创建一个新的进程及其主线程。新进程然后执行指定的可执行文件。该CreateProcessAsUser功能类似的CreateProcess函数,除了新进程运行在由hToken参数表示的用户的安全上下文中。默认情况下,新进程是非交互式的,即它运…

生成了文件却还是报错 Error:CreateProcess failed

想起来,以前用keil编译器的时候,也出现过这样的问题: 第一眼都是看到了“1 Error(s)”,就下意识认为自己程序出错了,找了半天没找到。 后来多看了一眼,发现完全这个错误其实可以完全不用理会,因…

【Error】Error running process: CreateProcess failed. Code 2

重新安装了pycham发现在pycharm里打不开控制台窗口了 解决办法: 在file -->setting --> Tools --> Terminal里 把Shell path 从 powershell.exe 改为 cmd.exe

Cannot run program “svn“ (in directory “D:xxxx“): CreateProcess error=2, 系统找不到指定的文件。报错解决方法

目录 一、报错内容 二 、原因 三、解决方法 一、报错内容 Cannot run program "svn" (in directory "xxxx"): CreateProcess error2, 系统找不到指定的文件 二 、原因 TortoiseSVN安装的时候没有安装command命令,不能通过命令执行版本管理…

CreateProcess error=5, 拒绝访问

一、情景再现 在一个Java项目中引入一个Python执行脚本,运行项目时报错: 二、问题分析 查看代码调用了源码中的exec()方法 在java中,RunTime.getRuntime().exec()实现了调用服务器命令脚本来执行功能需要。也就是说…

failed to create process 的解决方式

网上大多数都是说python.exe移动了位置,导致你本来环境变量中配置的scripts中的python.exe找不到位置。 你需要修改scripts中的pip.exe中的python路径 如 当然这是其中一种可能性, 也有可能是由于你自己配置的环境变量产生了冲突 在windows的系统环境…

CreateProcess 创建进程失败原因调查

使用 CreateProcess 函数创建进程(调用外部程序)算是很常用的操作了,最近在工作中却遇到一个少见的怪现象,经常使用的一段代码(调用外部程序并等待其结束,主要就使用了 CreateProcess 函数)&…

jsp页面报org.apache.jasper.JasperException错误的一种解决方法

最近idea搭建ssm项目jsp页面出现如下问题 解决办法如下&#xff1a; 把 <% taglib uri“http://java.sun.com/jstl/core” prefix“c” %> 改成 <% taglib uri“http://java.sun.com/jstl/core_rt” prefix“c” %>