专业游戏门户,分享手游网游单机游戏百科知识攻略!

嗨游网
嗨游网

QT多线程详解,QT多线程实现的两种方式案例详解

来源:小嗨整编  作者:小嗨  发布时间:2023-02-16 08:04
摘要:QT多线程详解,QT多线程实现的两种方式案例详解这篇文章主要介绍了QT实现多线程两种方式案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下。Qt4.7之前版本处理步骤1.自定义一个类,继承于...

QT多线程详解,QT多线程实现的两种方式案例详解

这篇文章主要介绍了QT实现多线程两种方式案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下。

QT多线程详解,QT多线程实现的两种方式案例详解

Qt4.7之前版本处理步骤

1.自定义一个类,继承于QThread。

class MyThread:public QThread{public:    vid run();//虚函数  线程处理函数(和主线程不在同一个线程)    signals:    void isDone();//信号 线程执行完发送}void MyThread::run() {    // 实现  -- 复杂的处理过程        emit isDome;// 发送线程};

2.定义线程

MyThread thread;

3.开启线程

thread.start();

不能通过直接调用run()函数,通过start()函数间接调用run()函数。

4.自定义线程结束槽函数

public:void dealDone();——————————————————————void Widget::dealDone(){    // 线程结束后的操作}

5.绑定线程结束信号和线程结束槽

connect(&thread,&MyThread::isDone,this,&Widget::dealDone);

6.定义线程关闭槽函数

void Widget::stopThread(){    // 停止线程    thread->quit();    // 等待线程运行完成之后结束    thread->wait();}

建议不要使用terminate()容易出现内存问题

建议使用quit()

7.绑定窗口关闭信号和线程关闭槽函数

connect(this,&Widget::destroyed,this,&Widget::stopThread);

新用法处理步骤

1.设定一个类,继承于QObject。

2.类中设置一个线程函数(只有一个函数是线程函数)和线程开始信号。

class MyThread : public QObject{    Q_OBJECTpublic:    explicit MyThread(QObject *parent = nullptr);    void run();    void start();    void stop();signals:    void myThreadrun();private:    bool isrun;public slots:};void MyThread::run(){    while(isrun == true) {        QThread::sleep(1);        emit myThreadrun();        qDebug() << "子线程:" << QThread::currentThread();        if(isrun == false) break;    }}void MyThread::start() {    qDebug() << "开始";    this->isrun = true;}void MyThread::stop(){    qDebug() << "停止";    this->isrun = false;}

3.创建线程对象(不能指定对象)和 QThread子线程对象

MyThread *mythread;

QThread *thread;

this->mythread = new MyThread;

this->thread = new QThread(this);

4.处理事件、鼠标按下开启和关闭事件、窗口关闭事件处理

void Widget::dealThread() {static int i = 0;    i++;    ui->lcdNumber->display(i);}void Widget::on_pushButton_strat_clicked(){    if(thread->isRunning() == true){        return;    }    thread->start();    mythread->start();    emit runThread();}void Widget::on_pushButton_stop_clicked(){    if(thread->isRunning() == false){        return;    }    mythread->stop();    thread->quit();    thread->wait();}void Widget::dealThreadclose() {    on_pushButton_stop_clicked();    delete mythread;}

5.把自定义线程类加到子线程

mythread->moveToThread(thread);connect(mythread,&MyThread::myThreadrun,this,&Widget::dealThread);

6.启动子线程,只是把线程启动了,并没有启动线程处理函数。

C++

connect(mythread,&MyThread::myThreadrun,this,&Widget::dealThread);

connect(this,&Widget::runThread,mythread,&MyThread::run);

qDebug() << "主线程:" << QThread::currentThread();

connect(this,&Widget::destroyed,this,&Widget::dealThreadclose);


本文地址:IT问答频道 https://www.eeeoo.cn/itwenda/903088.html,嗨游网一个专业手游免费下载攻略知识分享平台,本站部分内容来自网络分享,不对内容负责,如有涉及到您的权益,请联系我们删除,谢谢!


IT问答
小编:小嗨整编
相关文章相关阅读
  • win10电脑如何关闭超线程

    win10电脑如何关闭超线程

    1、在电脑上打开开始菜单,找到系统配置选项,并点击打开。2、在跳转的界面中,点击上方的引导选项。3、在打开的引导界面中,找到高级选项,并点击打开。4、在打开的高级选项中,找到处理器个数,并选择为一个。5、设置完成后,点击下方的确定选项即可完...

  • 进程和线程是什么

    进程和线程是什么

    进程是资源分配的基本单位,它是程序执行时的一个实例,在程序运行时创建;线程是程序执行的最小单位,是进程的一个执行流,一个线程由多个线程组成的。什么是进程进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会...

  • 进程和线程是什么

    进程和线程是什么

    进程是资源分配的基本单位,它是程序执行时的一个实例,在程序运行时创建;线程是程序执行的最小单位,是进程的一个执行流,一个线程由多个线程组成的。什么是进程进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会...

  • 核心数和线程数是什么意思

    核心数和线程数是什么意思

    核心数指的是cpu内核数量,表示一个cpu由多少个核心组成;cpu核心是cpu的重要组成部件,在内核频率、缓存大小等条件相同的情况下,cpu核心数量越多,cpu的整体性能越强。线程数是一种逻辑的概念,简单地说,就是模拟出的cpu核心数。cp...

  • 多线程是什么意思

    多线程是什么意思

    线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,而多线程就是指从软件或者硬件上实现多个线程并发执行的技术,具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。线程是...

  • PHP中的多线程

    PHP中的多线程

    在php编程中,如果我们需要执行多个任务或同时处理多个请求,多线程是一种非常重要的编程技术。多线程可以实现多个线程同时运行,提高程序效率,提升用户体验。一、PHP多线程介绍PHP多线程是指同时执行两个或多个线程的程序,每个线程都是一个独立的...

  • 线程和进程的区别是什么

    线程和进程的区别是什么

    线程和进程的区别:1、线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小;2、进程相对独立,需要通过显式机制进行通信,切换开销较大;而线程的管理更为灵活,进程的管理相对复杂。线程和进程是操作系统中...

  • superpi,superpi支持多核和多线程吗一般的多核cpu跑superpi用到...

    superpi,superpi支持多核和多线程吗一般的多核cpu跑superpi用到了多核还

    1,superpi支持多核和多线程吗一般的多核cpu跑superpi用到了多核还superpi只支持单线程~就是只用一个核心来计算多核无优势~CPU频率越高就算的越快你好!这个是单核的。如果要多线程,请跑wPrime和Fritz仅...

  • 周排行
  • 月排行
  • 年排行

精彩推荐