建议使用该方法
B站课程:【Qt中多线程-线程池的使用-C/C++/qt】 Qt中多线程-线程池的使用-C/C++/qt_哔哩哔哩_bilibili
操作流程:
- 创建一个新类(MyWork),让其从QObject中派生
- 添加一个公共的成员函数,函数体就是我们要子线程中执行的业务逻辑
- 在主线程中创建一个Qthread类型对象,这就是子线程的对象
//3.将任务对象移动到某个子线程中 gen->moveToThread(t1); bubble->moveToThread(t2);
- 在主线程中创建工作的类对象(不要给对象指定父类)
- 将MyWork对象移动到创建的子线程对象中,需要调用QObject类提供的moveToThread()方法
- 启用子线程,调用started(),这时候线程启动了,但是移动到线程中的对象并没有工作
- 调用MyWork类对象的工作函数,让这个函数开始执行,这时候是在移动到的那个子线程中运行
connect(this, &MainWindow::starting, gen, &Generate::working); //主线程告诉子线程开始工作 //2.启动子线程 connect(ui->start, &QPushButton::clicked, this, [=](){ emit starting(10000); //主线程发送信号告诉子要生成10000个随机数 t1->start(); //生成随机数的线程 });
相当于把每个类要做的工作写好,分配好,需要使用的时候将他们分配进一个线程,直接调用即可