专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

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);


本文地址:百科问答频道 https://www.neebe.cn/wenda/903088.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • 超线程是什么意思?

    超线程是什么意思?

    超线程是一种现当代多任务处理的技术,它可以使一个物理处理器核心有效地处理两个任务或更多任务。它通过在CPU中同时执行比物理处理核心更多的虚拟线程达到其目的。这被称为“虚拟处理”。超线程不仅有助于提高CPU的性能,而且可以降低新设计物理处理...

  • 线程数是什么意思?

    线程数是什么意思?

    线程是一种轻量级的进程,被视作操作系统内一种最小单位,它被应用程序利用来组织具有不同目标的任务,避免了系统资源的浪费。线程数是指一个程序中有多少个线程在同时执行任务,即使是一个最简单的应用程序,其中也会有一个主线程在跑,而日常使用到的多线...

  • 超线程有什么用

    超线程有什么用

    超线程是可以提升cpu使用效率的。在程序支持的复情况下性能提升明显,最多30%的性制能提升。超线程技术把多线程处理器内部的两个逻辑内核模拟成两个物理芯片,让单个处理器就能使用线程级的并行计算,进而兼容多线程操作系统和软件。超线程是可以提升...

  • 超线程是什么

    超线程是什么

    超线程技术把多线程处理器内部的两个逻辑内核模拟成两个物理芯片,让单个处理器就能使用线程级的并行计算,进而兼容多线程操作系统和软件。超线程技术充分利用空闲CPU资源,在相同时间内完成更多工作。超线程(HT,Hyper-Threading...

  • 多线程是什么

    多线程是什么

    多线程是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。多线程(英语...

  • 线程间通信的方式有哪些,线程间通信的几种方式

    线程间通信的方式有哪些,线程间通信的几种方式

    线程间通信的方式有哪些,线程间通信的几种方式一、使用同一个共享变量控制Synchronized、wait、notifypublicclassDemo1{ privatefinalListLock、ConditionpublicclassT...

  • 进程线程的关系和优缺点是什么

    进程线程的关系和优缺点是什么

    进程线程的关系和优缺点是什么 进程和线程的区别是什么?有什么关系?相信大家对于进程都很熟悉了吧,而线程相对于进程而言,是一个更加接近于执行体的概念,为了让大家更好的了解进程和线程,下面给大家介绍进程和线程的区别和联系。进程和线程的区别...

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

    线程和进程的区别是什么 线程和进程的区别介绍

    了解计算机的朋友相信对于线程和进程都比较了解,总的来说它们就像是孪生兄弟一样,让我们分不清哪个是干什么用的。其实它们各自有各自的定义,在计算机运行上,它们也是有各自的区别的。那么线程和进程的区别究竟在哪里呢?下面就让小编来仔细的讲解一下。...

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

精彩推荐