前言:
转载请附上连接,本帖原创请勿照抄。
QT初始线程(简单实现)目录
本文详细的使用示例来简单的实现了线程的开启和关闭,首页推荐的文章千篇一律,深入灵魂的文章万里挑一。
接下来步入正题,开始代码实现
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