C++ Qt 多线程 QThread 与线程安全锁
Qt 多线程概述
Qt 中的多线程 API 是对系统提供的线程接口(如 Linux pthread)的封装,相比原生 API 更便于使用。
QThread
创建线程需要实例化 QThread 类并指定入口函数。通常通过继承 QThread 并重写 run() 函数来实现多态入口。
常用 API:
| 函数 | 说明 |
|---|---|
| run() | 线程的入口函数 |
| start() | 调用 run() 开始执行线程 |
| currentThread() | 返回当前执行线程的 QThread 指针 |
| isRunning() | 如果线程正在运行则返回 true |
| sleep() / msleep() / usleep() | 使线程休眠,单位为秒/毫秒/微秒 |
| wait() | 阻塞线程直到线程完成或超时 |
| terminate() | 终止线程的执行 |
| finished() | 线程结束时发出的信号 |
实操 Demo:倒计时程序
通过新线程进行计时,利用信号槽通知主线程更新界面。
- 拖拽一个 LCD 控件,初始值设置为 10。
- 新增 C++ Class 类,继承 QThread 父类。
- 重写父类的 run 方法
void run()。 - 新线程不能直接修改界面内容,需通过信号通知主线程。
- 循环 10 次,每次休眠 1s,发送信号 notify。
- 在 Widget 中连接信号槽,槽函数修改 lcd 的值。
- 构造函数中启动线程。
主要源码如下:
// thread.h
#ifndef THREAD_H
#define THREAD_H
#include <QWidget>
#include <QThread>
class Thread : public QThread {
Q_OBJECT
public:
Thread();
void run();
signals:
void notify;
};


