赞
踩
Qt有三种线程方式,我这里使用的是,在Qt中继承QThread实现线程的方式,这也是常规的的一种方式。
新建一个类叫WorkThread,并继承QThread,重写Run()
函数,将要执行的代码,放在这个类里面。
WorkThread头文件
#ifndef WORKTHREAD_H #define WORKTHREAD_H #include <QThread> #include <QObject> class WorkThread : public QThread//注意:这里继承QThread { Q_OBJECT public: explicit WorkThread(QObject *parent = nullptr); public slots: public: void stop(); protected : void run() override;//重写的Run()函数 private: int test=0; bool m_Stop=false; }; #endif // WORKTHREAD_H
WorkThread源文件
#include "workthread.h" #include <QDebug> WorkThread::WorkThread(QObject *parent) : QThread{parent} { m_Stop=true;//工作线程实例后,将这个变量赋为true } void WorkThread::run() { //线程一直执行 while (m_Stop) { qDebug()<<QThread::currentThreadId() <<"Const: "<< ++test; sleep(1); } } void WorkThread::stop() { m_Stop =false; }
MainWindow源文件
void MainWindow::on_butStart_clicked()
{
workThread = new WorkThread;
workThread->start();//启动线程
}
void MainWindow::on_butStop_clicked()
{
//停止线程
workThread->quit();
workThread->stop();//设置工作线程m_Stop变量为false,否则程序会一直阻塞
workThread->wait();
qDebug()<<workThread->isRunning();
}
点击开启按钮的效果,线程开始运行,每间隔1s打印输出一次数字。
点击停止,程序会关闭线程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。