优雅地使用Qt创建新线程
Qt作为一个优秀的跨平台开发框架,对于多线程的支持必然要非常的优雅~本篇文章就来探讨如何利用Qt创建新的子线程。
关于多线程的有点我就不赘述了,如需了解,善用百度~
本文根据B站黑马程序员的课程,再加上自己的一丢丢理解而写的。
Qt4线程的创建与使用
在Qt4的时代(我莫得经历过,因为Qt4是十几年前发布的,其中的某些思想肯定跟不上目前的发展,但是Qt5依然兼容Qt4的多线程模式),如果我们想要创建一个线程,我们只需新建一个类MyThread
并继承于QThread
,并重写QThread
类的虚函数void run()
。当我们需要创建进程的时候,只需声明一个MyThread
对象,然后调用MyThread::start()
即开启了一个新线程。
例:
1 |
|
1 | MyThread::MyThread() |
1 | MyThread* thread = new MyThread(); |
如何停止线程在后面讲解。
Qt5线程的创建与使用
来到Qt5时代,线程的调用不再是重新run
函数,而是自定义一个继承于QObject
的MyThread
类,这个类需要一个线程数据处理方法和一个线程结束信号,具体定义流程如下:
- 创建一个
MyThread
对象,且这个对象不能指定父对象 - 创建一个
QThread
对象,即我们需要的子线程 - 将自定义类放进我们创建的子线程对象,即调用
moveToThread(QThread *target)
- 启动子线程,即调用子线程对象的
start()
方法,这个时候子线程已经启动了,但是数据处理还没启动 - 必须必须利用信号槽的方式启动自定义类的对象的方法,否则数据处理方法就在主线程中运行
上例子,比文字描述更加清晰
1 |
|
1 | MyWork::MyWork() |
1 | //主线程cpp文件 |
待续…
后话
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Aymeticの小窝!
评论