第一种
继承QThread类,然后重写run()函数
// 线程一
Mythread1 = new CMyThread;
connect(Mythread1,&CMyThread::sig_num,this,&MainWindow::slots_thread1);
connect(ui->pushButton,&QPushButton::clicked,[=](){Mythread1->m_state = ThreadState::RUN;Mythread1->start();});
connect(ui->pushButton_2,&QPushButton::clicked,[=](){Mythread1->m_state = ThreadState::STOP;});
第二种
创建一个线程,然后将要做的逻辑放到你创建的线程里。
// 线程二Mythread2 = new CMyThreadTwo;m_thread2 = new QThread;Mythread2->moveToThread(m_thread2);connect(this,&MainWindow::sig_StartThread2,Mythread2,&CMyThreadTwo::slots_start);connect(Mythread2,&CMyThreadTwo::sig_num,this,&MainWindow::slots_thread2);bool b = connect(ui->pushButton_3,&QPushButton::clicked,[=](){Mythread2->m_state = ThreadState::RUN;m_thread2->start();emit sig_StartThread2();//Mythread2->Task();});connect(ui->pushButton_4,&QPushButton::clicked,[=](){Mythread2->m_state = ThreadState::STOP;});
第三种
run就完了!
// 线程三
connect(ui->pushButton_5,&QPushButton::clicked,[=](){m_state3 = ThreadState::RUN;QtConcurrent::run(this,&MainWindow::thread3);});
connect(ui->pushButton_6,&QPushButton::clicked,[=](){m_state3 = ThreadState::STOP;});
QtConcurrent::run
是 Qt 框架提供的一个方便的函数,用于在一个单独的线程中运行一个函数。它允许你简单地将一个可调用对象(如函数、函数对象、lambda 表达式等)放到一个新的线程中执行,从而实现异步操作,避免阻塞主线程。这在处理一些耗时的任务(如文件读取、复杂的计算等)时非常有用,可以提高应用程序的响应速度和性能。
启动的时候用start()启动。如果直接调用的是run()函数的话,并不会创建一个新线程,任然是在主线程。
第四种
线程池
创建线程池,定义任务类,然后将任务放到线程池中
QThreadPool pool;
pool.setMaxThreadCount(5); // 设置线程池最大线程数为5//任务类
class PrintNumberTask : public QRunnable
{
public:void run() override{qDebug() << "Printing a number from a thread in the pool.";}
};int main()
{PrintNumberTask *task = new PrintNumberTask();QThreadPool::globalInstance()->start(task);// 或者使用自定义的线程池对象// pool.start(task);return 0;
}