【Qt】多线程-QThread 类简介

时间:2025-01-29 13:36:35

一个 QThread 类的对象管理一个线程。在设计多线程程序的时候,需要从 QThread 继承定义线程类,并重新定义 QThread 的虚函数 run(),在函数 run() 里处理线程的事件循环。

应用程序的线程称为主线程,创建的其他线程称为工作线程。一般会在主线程里创建工作线程,并用函数 start() 开始执行工作线程的任务。函数 start() 会在其内部调用函数 run() 进入工作线程的事件循环,函数 run() 的程序体一般是一个无限循环,可以在函数 run() 里调用函数 exit() 或 quit() 结束线程的事件循环,或在主线程里调用函数 terminate() 强制结束线程。

QThread 常用 API

函数 功能
run() 线程的入口函数
start() 通过调用 run() 开始执行线程。操作系统将根据优先级参数调度线程。如果线程已经在运行,这个函数什么也不做
cuttentThread() 返回一个指向管理当前执行线程的QThread的指针
isRunning() 如果线程正在运行则返回 true,否则返回 false
sleep() / msleep() / usleep() 使线程休眠,单位为秒 / 毫秒 / 微秒
wait() 阻塞线程,直到满足以下任何一个条件:
与此 QThread 对象关联的线程已经完成执行(即当它从run() 返回时)。如果线程已经完成,这个函数将返回 true。如果线程尚未启动,它也返回 true。
已经过了几毫秒。如果时间是 ULONG_MAX(默认值),那么等待永远不会超时(现成必须从 run() 返回)。如果等待超时,此函数将返回false。
terminate() 终止线程的执行。线程可以立即终止,也可以不立即终止,取决于操作系统的调度策略。在 terminate() 之后使用 QThread::wait() 来确保。
finished() 当线程结束时会发出该信号,可以通过该信号来实现线程的清理工作。