欢迎光临散文网 会员登陆 & 注册

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

2023-06-02 10:37 作者:钢厂小霸王_X  | 我要投稿

上回说到,重写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() 就可以了,这样可以让编写的程序更加灵活,可读性更强,更易于维护。

最后不要忘了释放线程资源


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

分享到微博请遵守国家法律