Qt 中多线程的使用方法2--自定义working()函数

上回说到,重写run()函数不能传入参数,这期这个自定义working()则可以解决这个问题。
其具体操作步骤如下:
1. 创建一个新的类,让这个类从 QObject 派生
2. 在这个类中添加一个公共的成员函数,函数体就是我们要子线程中执行的业务逻辑
3. 在主线程中创建一个 QThread 对象,这就是子线程的对象
4.在主线程中创建工作的类对象(千万不要指定给创建的对象指定父对象)
5. 将 MyWork 对象移动到创建的子线程对象中,需要调用 QObject 类提供的moveToThread() 方法
6. 启动子线程,调用 start(), 这时候线程启动了,但是移动到线程中的对象并没有工作
7. 调用 MyWork 类对象的工作函数,让这个函数开始执行.
示例代码:
还是之前的例子,改成working()方法,子线程处理事件,主线程处理返回结果

mytread.h:
mytread.cpp:
widget.h:
widget.cpp:

使用这种多线程方式,假设有多个不相关的业务流程需要被处理,那么就可以创建多个类似于 MyWork 的类,将业务流程放多类的公共成员函数中,然后将这个业务类的实例对象移动到对应的子线程中 moveToThread() 就可以了,这样可以让编写的程序更加灵活,可读性更强,更易于维护。
最后不要忘了释放线程资源
