QT中的多线程

article/2025/10/27 19:37:39

目录

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对象管理一个线程。QThread的执行从run()函数的执行开始,在Qt自带的QThread类中,run()函数通过调用exec()函数来启动事件循环机制,并且在线程内部处理Qt的事件。在Qt中建立线程的主要目的就是为了用线程来处理那些耗时的后台操作,从而让主界面能及时响应用户的请求操作。

QThread的使用方法有如下两种:

①、QObject::moveToThread()

②、继承QThread类

下面讲解第二种方法

1.2、继承Qthread类

先添加一个C++的文件

要添加下列句子才能支持信号与槽

//定义虚函数run()用来执行线程
protected:virtual void fun();//定义函数设置名字
private:QString threadName; 
public:void setThreadName(QString);void MyThread::setThreadName(QString name)
{threadName = name;
}//实现run函数
void MyThread::run()
{qDebug()<<"MyThread::run:"<<QThread::currentThreadId(); while(1){qDebug() << threadName << "I'am A thread"; QThread::sleep(1);}
}//执行线程
MyThread thread1; 
thread1.setThreadName("thread1"); 
thread1.start();MyThread thread1; 
thread1.setThreadName("thread2"); 
thread1.start();

 对上面的参数进行介绍:

1.2.1、得到线程id

//在之前实现的每一个函数函数中都加上输出,这样就能直到执行这个函数的线程id了
qDebug()<<"函数的名字"<<QThread::currentThreadId();

1.2.2、让线程一直执行

run情况下,就在里面加上一个while(1)一直执行
里面加一个sleep(),让他不要一直占cpu

​​​​​​​1.2.3、线程退出

exit()//退出
wait(1000)	//	等一秒,然后退出

1.2.4、​​​​​​​connect的第五个参数

 这个参数在线程中才用的到,表示线程的一个连接方式

 一般的话,就是自动连接,也就是第五个参,不用填。

1.2.5、线程锁 QMutex

        用线程还是会遇到访问共同资源的问题,如果遇到还是需要锁

        QMutex类提供了一种保护一个变量或者一段代码的方法,这样可以每次只让一个线程访问它。这个  类提供了一个lock()函数用于锁住互斥量,如果互斥量是解锁状态,那么当前线程立即占用并锁定它;否则,当前线程会阻塞,直到这个互斥量的线程对它解锁为止。QMutex类还提供了一个tryLock()函数, 如果该互斥量已经锁定,它就会立即返回。

void MyThread::run()
{qDebug()<<"MyThread::run"<<QThread::currentThreadId(); while(1)//用while会让他一直跑{mutex.lock(); x++;qDebug()<<threadName<<x<<QThread::currentThreadId();mutex.unlock(); QThread::sleep(1);}
}


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

相关文章

faild to create process解决办法

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

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

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

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

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

runnerw.exe: CreateProcess failed with error 5:

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

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

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

failed to create process.

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

CreateProcessAsUser

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

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

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

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

重新安装了pycham发现在pycharm里打不开控制台窗口了 解决办法&#xff1a; 在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命令&#xff0c;不能通过命令执行版本管理…

CreateProcess error=5, 拒绝访问

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

failed to create process 的解决方式

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

CreateProcess 创建进程失败原因调查

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

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” %>

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

最近遇到的一个问题 把 <% taglib uri"http://java.sun.com/jstl/core" prefix"c" %> 改成 <% taglib uri"http://java.sun.com/jstl/core_rt" prefix"c" %> 这只是一种方法&#xff0c;如果解决不了&#xff0c;我…

org.apache.jasper.JasperException: java.lang.ClassNotFoundException解决办法

一、运行项目出错截图 报错找不到jsp文件&#xff0c;此时修改一下访问路径&#xff0c;会报如下错误: 二、解决java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSupport的方法&#xff1a; 1.缺少了相应的jar包&#xff1a; jstl-1.2standard…

org.apache.jasper.JasperException:解决办法!

org.apache.jasper.JasperException: The absolute uri: http://itcast.cn/common/ cannot be resolved in either web.xml or the jar files deployed with this application解决办法 今天在完成SSM框架整合的时候&#xff0c;使用eclipse在tomcat运行项目没提示任何问题&…

org.apache.jasper.JasperException: 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/

问题如下&#xff1a; lib包下配置 jsp页面的导入一切正常&#xff0c;没有提示任何错误 网上也查了好多结果&#xff0c;最后发现修改tomcat中的conf/catalina.properties文件&#xff0c; tomcat.util.scan.DefaultJarScanner.jarsToSkip*.jar 改为&#xff1a; tomcat.ut…

javaweb项目报错:org.apache.jasper.JasperException: 无法为JSP编译类

执行相应的跳转页面&#xff0c;出现了报错&#xff1a; HTTP状态 500 - 内部服务器错误 org.apache.jasper.JasperException: 无法为JSP编译类 类型 异常报告消息 无法为JSP编译类:描述 服务器遇到一个意外的情况&#xff0c;阻止它完成请求。例外情况org.apache.jasper.Jas…

Maven Web报错:org.apache.jasper.JasperException: Unable to compile class for JSP

Maven Web报错&#xff1a;org.apache.jasper.JasperException: Unable to compile class for JSP 今天被这个问题弄得&#xff0c;拽下了一大把的头发&#xff01;哭唧唧~~~ 遇到的问题截图&#xff1a; 于是查找各方面的资料&#xff0c;发现是jar包的冲突&#xff0c;于是…