QT线程QThread的简单使用实例 ,
主要介绍以下几点:
1.线程调用start()函数后会自己自动去调用run()函数,一般线程run()函数继承父类重写,即为线程的主要功能执行函数快。
2.线程运行中有一个运行态 即通过 调用isRunning()函数来判断线程是否正在执行。正在执行isRunning()函数返回真。否则返回假
3.线程运行完后可以通过调用isFinish()函数来判断线程是否执行完成。执行完成isFinish()函数返回真,否则返回假。
具体实例 见代码
main.cpp代码
****************************************************************************
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}****************************************************************************
mianwindow.h代码
****************************************************************************
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include"mx.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pbStart_clicked();
void on_pBStop_clicked();
void on_pbRunning_clicked();
void on_pbFinish_clicked();
private:
Ui::MainWindow *ui;
mx mx1;
};
#endif // MAINWINDOW_H*************************************************************************
mainwindow.cpp代码
************************************************************************
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pbStart_clicked()
{
mx1.start();
ui->pBStop->setEnabled(true);
ui->pbStart->setEnabled(false);
}
void MainWindow::on_pBStop_clicked()
{
if(mx1.isRunning())
{
mx1.stop();
}
ui->pBStop->setEnabled(false);
ui->pbStart->setEnabled(true);
}
void MainWindow::on_pbRunning_clicked()
{
if(mx1.isRunning())//判断线程是否正在运行
qDebug()<<"Running";
}
void MainWindow::on_pbFinish_clicked()
{
if(mx1.isFinished())// 判断线程是否执行完成
qDebug()<<"Finish";
}*******************************************************************
mainwindow的UI界面如下
******************************************************************
线程类如下:
mx.h代码
***********************************************************************************
#ifndef MX_H
#define MX_H
#include<QThread>
class mx :public QThread
{
public:
explicit mx(QObject *parent = 0);
void stop();
protected:
void run();
private:
volatile bool stopped;
};
#endif // MX_H**********************************************************************************
mx.cpp代码
********************************************************************************
#include "mx.h"
#include<QDebug>
mx::mx(QObject * parent) :
QThread(parent)
{
}
void mx::stop()
{
stopped = true;
}
void mx::run()
{
static int i =0;
while(!stopped)
{
i++;
qDebug()<<"i"<<i;
sleep(1);
}
stopped=false;
}******************************************************************************