【Qt】多线程

本文详细介绍了在Qt中使用QThread处理多线程的基本方法,包括常用API如run(),start(),以及线程安全的实现,如互斥锁、条件变量和信号量的使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、常用API

二、线程安全

2.1 互斥锁

2.2 条件变量

2.3 信号量 


在Qt中,多线程的处理一般是通过QThread类来实现

QThread代表一个在应用程序中可以独立控制的线程,也可以和进程中的其他线程共享数据。QThread对象管理程序中的一个控制线程

一、常用API

run() 线程入口函数
start()

通过调用run()函数开始执行线程,操作系统根据优先级参数调度线程

若线程已在运行,该函数说明也不做

currentThread() 返回一个指向 管理当前执行线程 的QThread的指针
isRunning() 若线程正在运行返回true,否则返回false
sleep()/msleep()/usleep() 实现线程休眠,单位为秒/毫秒/微秒
wait()

阻塞线程,直到满足以下任何一个条件:

与此QThread对象关联的线程已经完成执行(即当它从run()返回时),若线程已经完成,这个函数将返回true;若线程尚未启动,也返回true

已经过了几毫秒,若时间是ULONG_MAX(默认值),那么等待永远也不会超时(线程必须从run()返回)。若等待超时,此函数返回false

与POSIX pthread_join() 函数类似

terminate() 终止线程的执行。线程可以立即终止,也可以不立即终止,取决于操作系统的调度策略。在terminate()之后使用QThread::wait()来确保终止
finished() 当线程结束时会发出该信号,可以通过该信号来实现线程的清理工作

创建线程的步骤:

  1. 自定义一个类,继承于QThread,并且只有一个线程处理函数(和主线程不是同一个线程),这个线程处理函数主要就是重写父类中的 run()函数
  2. 线程处理函数里面写入需要执行的复杂数据处理
  3. 启动线程不能直接调用 run() 函数,需要使用对象来调用 start() 函数实现线程启动
  4. 线程处理函数执行结束后可以定义一个信号来告诉主线程
  5. 最后关闭线程

代码示例

新建 Qt 项目,设计UI界面如下:

新建一个类,继承于QThread类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GG_Bond21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值