QT 初识线程(简单实现)

前言:

转载请附上连接,本帖原创请勿照抄。

QT初始线程(简单实现)目录

1、 新建项目QThread

2、 新建线程类类

3、 创建新线程

4、 线程调用

5、 调用示例Demo


    本文详细的使用示例来简单的实现了线程的开启和关闭,首页推荐的文章千篇一律,深入灵魂的文章万里挑一。

接下来步入正题,开始代码实现

扫描二维码关注公众号,回复: 13116773 查看本文章

1、 新建项目QThread

正常建立项目

2、 新建线程类类

继承QThread,实现QObject。

3、 创建新线程

创建一个新的线程,重新实现QThread::run()。

有两种方法:一种是重新实现QThread::run()、另一种是方法类似只不过是通过判断bool值来开始结束线程。

本文使用第一种,因为简洁方便。

.h源文件

//引入
#include <QThread>
#include <QObject>
#include <QDebug>

//公共变量
    mythread();
    //线程处理函数
    void run();

signals:
    void isDone();  //处理完成信号

.cpp实现文件

void mythread::run()
{
    for(int i=0;i<10;i++) {
        qDebug() << "aa";
        sleep(1);
    }
    emit isDone();  //发送完成信号
}

4、 线程调用

.h源文件

//引入头文件
#include "mythread.h"

//槽函数
void dealDone();   //线程槽函数

private slots:
    //but按钮
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();
private:
    Ui::MainWindow *ui;
    //初始化
    mythread * thread;

.cpp实现文件

//构造函数 
thread = new mythread;  //分配空间
//关联信号获取结束线程信号
connect(thread, &mythread::isDone, this, &MainWindow::dealDone);
//当按窗口右上角x时,触发destroyed信号 --一般关闭窗口所有线程都会自动销毁
connect(this, &MainWindow::destroyed, this, &MainWindow::dealDone);
void MainWindow::on_pushButton_clicked()
{
    //停止线程
   dealDone();
}

void MainWindow::on_pushButton_2_clicked()
{

    //启动线程,处理数据
    thread->start();
    ui->pushButton_2->setEnabled(false);
    ui->pushButton->setEnabled(true);
    for (int i=0;i<10;i++) {
        qDebug()<<"bb";
    }

}

void MainWindow::dealDone()
{
    ui->label->setText("it is over");

   //停止线程
   thread->quit();

   //等待线程处理完手头工作
   thread->wait();
   ui->pushButton_2->setEnabled(true);
   ui->pushButton->setEnabled(false);

}

5、 调用示例Demo

//取消sleep函数
void mythread::run()
{
    for(int i=0;i<10;i++) {
        qDebug() << "aa";
        //sleep(1);
    }
    emit isDone();  //发送完成信号
}

void mythread::run()
{
    for(int i=0;i<10;i++) {
        qDebug() << "aa";
        sleep(1);//1秒
    }
    emit isDone();  //发送完成信号
}

下载地址:https://download.csdn.net/download/qq_37529913/13189024

其它线程文章:

QT QMutex使用详解:https://blog.csdn.net/qq_37529913/article/details/110187452

QT 线程之QSemaphore(深入理解):https://blog.csdn.net/qq_37529913/article/details/110187121

QT线程 Emit、Sgnals、Slot详细解释:https://blog.csdn.net/qq_37529913/article/details/110211435

QT 线程之QWaitCondition(深入理解):https://blog.csdn.net/qq_37529913/article/details/110212704

Qt 多线程之线程事件循环(深入理解):https://blog.csdn.net/qq_37529913/article/details/110229382

QT线程之QObjects(深入理解):https://blog.csdn.net/qq_37529913/article/details/110228837

QT线程之可重入与线程安全(深入理解):https://blog.csdn.net/qq_37529913/article/details/110224166

QT之浅拷贝、深拷贝、隐式共享(深度理解必看文章):https://blog.csdn.net/qq_37529913/article/details/110235596

QT 隐式共享机制对STL样式迭代器的影响:https://blog.csdn.net/qq_37529913/article/details/110252454

猜你喜欢

转载自blog.csdn.net/qq_37529913/article/details/110127940