您的位置:首页 > 编程语言 > Qt开发

QT线程QThread的简单使用实例

2016-03-07 22:03 429 查看
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;

}



******************************************************************************
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  QT QThread