Qt 中的多线程主要用于处理耗时操作,避免阻塞主线程(UI 线程),从而提高程序的响应性和运行效率。以下是 Qt 多线程的相关技术总结:
常见的多线程实现方式
-
继承 QThread 类 :最基础的实现方式,具体步骤为继承 QThread 类,重写其 run() 函数,在 run() 函数中编写线程要执行的代码,然后调用 start() 函数启动线程。例如:
-
定义一个自定义线程类 CameraThread,继承自 QThread,在 run() 函数中进行相机数据采集等耗时操作,并通过信号将采集到的数据传递给主线程。
-
在主线程中创建该线程对象,连接线程的信号与主线程的槽函数,启动线程后,子线程中的 run() 函数开始执行,主线程则继续运行,不会被耗时操作阻塞。
-
-
Worker + moveToThread 模式 :推荐使用的方式,更加灵活。其实现步骤为先创建一个工作类(QObject),定义该类的具体工作内容;再创建一个 QThread 对象;然后通过 moveToThread() 方法将工作对象移动到子线程;接着连接子线程的启动信号与工作对象的任务槽函数,以及工作对象的任务完成信号与主线程的槽函数,最后启动子线程。
-
例如,定义一个 CameraWorker 类,在其中定义数据采集任务的槽函数 doWork(),以及任务完成后的信号 frameReady。在主线程中创建 QThread 对象和 CameraWorker 对象
-