一、前言
前篇文章提供了Qt软件官方提供的一个我认为较为经典的多线程编程示例,总体代码里不是很多,也较为容易理解,但是其中也涉及到了一些串口编程和定时器编程的内容,还不是很专一讲述多线程的内容,为此,提供一篇使用QThread创建多线程编程的示例。
对于上篇内容可以点击下方链接查看:C++/Qt 多线程-CSDN博客
二、使用QThread创建多线程程序
1、QThread类简介
一个QThread类的对象管理一个线程。在设计多线程程序的时候,需要从QThread继承定义线程类,并重定义QThread的虚函数run(),在函数run()里处理线程的事件循环。
我们把应用程序的线程称为主线程,创建的其它线程称为工作线程,一般会在主线程里创建工作线程,并调用函数start()开始执行工作线程的任务。函数start()会在其内部调用函数run()进入工作线程的事件循环,函数run()的程序体一般是一个无线循环,可以在函数run()里调用函数exit()或quit()结束线程的事件循环,或在主线程里调用函数terminate()强制结束线程。
QThread类的主要接口函数如表所示,表中列出了函数参数,但是省略了const关键字。
类型 | 函数原型 | 功能 |
公有函数 | bool isFinished() | 判断线程是否已结束,也就是是否从函数run()退出 |
bool isRunning() | 判断线程是否正在运行 | |
QThread::Priority prioryty() | 返回线程的优先级,优先级用枚举类型QThread::Priority表示 | |
void setPriority(QThread::Priority priority) | 设置线程的优先级 | |
bool wait(unsigned long time) | 阻塞线程运行,直到线程结束,也就是从函数run()退出,或等待时间超过time毫秒后此函数返回false | |
公有槽函数 | void exit(int returnCode = 0) | 退出线程的事件循环,设置退出码为returnCode,其设置为0表示退出成功,设置为其它值表示有错误 |
void quit() | 退出线程的事件循环,并设置退出码为0,quit()等效于exit(0) | |
void start(QThread::Priority priority = InheritPriority) | 设置线程优先级为priority,其内部调用run()开始运行线程,操作系统根据priority参数进行调度 | |
void terminate() | 终止线程的运行,但不是立即结束线程,而是等待操作系统结束线程,使用te |