Qt 线程专题


先开个篇,在后续实践中更新内容。

分享gitee上的讲解和案例,这两个要仔细看,很优秀:

tech/QtThread · Weadbm/qt相关 - 码云 - 开源中国 (gitee.com)

Code · Lexi_XL/MultiThreadTest--Qt - 码云 - 开源中国 (gitee.com)

方式一:子类化Qthred

方式二:新建一个QObject,里面放工作函数再moveToThread

方式三:QtConcurrent

关于方式三:

QtConcurrent是一个命名空间而不是一个类,因此其中的所有函数都是命名空间内的全局函数。

QtConcurrent这是一个高级 API,构建于QThreadPool之上,它提供更高层次的函数接口(APIs),使所写的程序,可根据计算机的CPU核数,自动调整运行的线程数量。通常用于处理大多数通用的并行计算模式。

方式一、二有一个共同的缺点:繁杂的参数传递过程,这两个方法都需要将工作函数放在新建的类中,导致当前主线程中的各种属性和全局变量需要使用信号槽传递到子线程。
QtConcurrent就可以不需要使用信号槽来传递参数,直接在当前类里面写工作函数,工作函数可以直接使用当前类的全局变量和属性。

【实践】

方式一、二参考我的git。MultithreadedCV · xixixing/读书_OpenCV3和Qt5计算机视觉应用开发 - 码云 - 开源中国 (gitee.com)

方式三参考Qt最简单的多线程方法QtConcurrent::run()_guo88455648的博客-CSDN博客_qtconcurrent

【参考博客】

最详细的Qt多线程的三种方法之一QThread_苏克贝塔的博客-CSDN博客_qt异步线程

最详细的Qt多线程的三种方法之二QtRunnable::run()+QThreadPool_苏克贝塔的博客-CSDN博客

最详细的Qt多线程的三种方法之三QtConcurrent::run()+QThreadPool_苏克贝塔的博客-CSDN博客_qtconcurrent::run

Qt并发模块Qt Concurrent的使用_Amnesia Greens的博客-CSDN博客_qtconcurrent

QT