返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >详解Qt中线程的使用方法
  • 338
分享到

详解Qt中线程的使用方法

Qt线程使用Qt线程 2022-12-16 09:12:24 338人浏览 八月长安
摘要

Qt中使用线程可以提高工作效率。 要使用线程要经过一下四个步骤: (1)先创建一个c++ class文件,记得继承Thread,创建步骤如下: a、第一步 b、第二步 (2)自

Qt中使用线程可以提高工作效率。

要使用线程要经过一下四个步骤:

(1)先创建一个c++ class文件,记得继承Thread,创建步骤如下:

a、第一步

b、第二步

(2)自定义一个run函数,以后启动线程的时候,程序就会跳转到run函数中

void run();

(3)初始化线程

HDThread mythread = new HDThread();

(4)启动线程

mythread->start();

下面来看看线程使用的具体列子:

线程头文件hdthread.h:

#ifndef HDTHREAD_H
#define HDTHREAD_H
#include <QThread>
#include <QLabel>
#include <QMutex>

class HDTHread : public QThread
{
public:
    HDTHread(QMutex* mtex,QObject *parent = 0);
    void run();//自定义的run函数
    void setLabel(QLabel *lb);
private:
    QLabel *label;
    QMutex *mutex; //互斥
};

#endif // HDTHREAD_H

主函数的头文件threadqt.h

#ifndef THREADQT_H
#define THREADQT_H

#include <QMainWindow>
#include <hdthread.h>
#include <writefile.h>
#include <QMutex>
#include <QSemaphore>

namespace Ui {
class ThreadQt;
}

class ThreadQt : public QMainWindow
{
    Q_OBJECT

public:
    explicit ThreadQt(QWidget *parent = 0);
    ~ThreadQt();

     //定义静态的信号类
    static QSemaphore *sp_A;
    static QSemaphore *sp_B;
private slots:
    void on_pushButton_clicked();

private:
    Ui::ThreadQt *ui;

    HDTHread *thread; //hdtread类,里面继承了线程
    WriteFile *writethread;
    QMutex mutex;//定义互斥锁类

};

#endif // THREADQT_H

源文件hdthread.cpp:

#include "hdthread.h"
#include <QDebug>
#include <threadqt.h>
HDTHread::HDTHread(QMutex *mtex, QObject *parent):QThread(parent)//构造函数,用来初始化
{
    this->mutex = mtex;
}
void HDTHread::setLabel(QLabel *lb)
{
    this->label = lb;
}
 
void HDTHread::run() //启动线程时执行的函数
{
    while(true)
    {
 
        qint64 data = qrand()%1000; //取随机数
        //this->mutex->lock();//上锁
        ThreadQt::sp_A->acquire();//请求信号
        this->label->setText(QString::number(data));
         sleep(1);
        ThreadQt::sp_B->release();//释放信号
        //this->mutex->unlock();//解锁
 
        qDebug()<<"hello Qt"<<data;
    }
}

源文件threadqt.cpp

#include "threadqt.h"
#include "ui_threadqt.h"
 
//初始化静态变量
 QSemaphore *ThreadQt::sp_A = NULL;
 QSemaphore *ThreadQt::sp_B = NULL;
 
ThreadQt::ThreadQt(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::ThreadQt)
{
    ui->setupUi(this);
    //创建信号对象
    sp_A = new QSemaphore(1);
    sp_B = new QSemaphore(0);
 
}
 
ThreadQt::~ThreadQt()
{
    delete ui;
}
 
void ThreadQt::on_pushButton_clicked()
{
    thread = new HDTHread(&mutex); //初始化线程
    thread->setLabel(ui->label);
    thread->start();//开启线程
 
    writethread = new WriteFile(&mutex);
    writethread->setLabel(ui->label);
    writethread->start();
}

大家也看到了,此处的线程也用到了互斥锁(信号量)保证线程读写数据时不出现错误,这里大家可以看一下具体实现的代码

this->mutex->lock();//上锁
ThreadQt::sp_A->acquire();//请求信号
this->label->setText(QString::number(data));
sleep(1);
ThreadQt::sp_B->release();//释放信号
this->mutex->unlock();//解锁

到此这篇关于详解Qt中线程的使用方法的文章就介绍到这了,更多相关Qt线程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解Qt中线程的使用方法

本文链接: https://lsjlt.com/news/175006.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 详解Qt中线程的使用方法
    QT中使用线程可以提高工作效率。 要使用线程要经过一下四个步骤: (1)先创建一个c++ class文件,记得继承Thread,创建步骤如下: a、第一步 b、第二步 (2)自...
    99+
    2022-12-16
    Qt线程使用 Qt线程
  • 一文详解Qt中线程的实际应用
    目录1、多线程操作UI界面的示例2、避免多次connect3、优雅地结束线程的两种方法为了让程序尽快响应用户操作,在开发应用程序时经常会使用到线程。对于耗时操作如果不使用线程,UI界...
    99+
    2023-03-10
    Qt线程应用 Qt线程
  • Qt计时器使用方法详解
    本文实例为大家分享了Qt计时器的使用方法,供大家参考,具体内容如下 计时器 在我们的日常设计程序中,经常需要固定时间段来刷新界面或者处理一些事务,这个时候计时器就很重要。 比如说在用...
    99+
    2022-11-13
    Qt 计时器
  • 详解Java多线程tryLock()方法使用
    tryLock(long time, TimeUnit unit) 的作用在给定等待时长内锁没有被另外的线程持有,并且当前线程也没有被中断,则获得该锁,通过该方法可以实现锁对象的限时...
    99+
    2024-04-02
  • Java线程中的sleep方法详解
    在Java线程中,sleep方法是一个线程的静态方法,用于暂停当前线程的执行一段时间。sleep方法的语法如下:```javapub...
    99+
    2023-09-14
    Java
  • Python多线程使用方法详细讲解
    目录一、简介二、线程模块三、使用 threading 模块创建线程四、线程同步五、线程优先级队列( Queue)1、queue队列2、队列queue公共方法3、其他六、Queue详细...
    99+
    2024-04-02
  • Ruby多线程库(Thread)使用方法详解
    Thread是Ruby的线程库,Thread库已经内置在Ruby中,但如果想要使用线程安全的Queue、Mutex以及条件变量等,则需要手动require 'thread&#...
    99+
    2024-04-02
  • QT线程QThread的使用介绍
    目录1. 概述2. moveThread 示例3. QThread 示例4. 总结1. 概述 QThread 有两种使用方式 QObject::moveToThread()派生QTh...
    99+
    2024-04-02
  • Java中终止线程的方法详解
    Java中终止线程的方式主要有三种:使用stop()方法,已被弃用。原因是:stop()是立即终止,会导致一些数据被到处理一部分就会被终止,而用户并不知道哪些数据被处理,哪些没有被处理,产生了不完整的“残疾”数据,不符合完整性,所以被废弃。...
    99+
    2023-05-31
    java 终止线程 ava
  • 详解Qt中QStackedWidget控件的使用
    目录引言QStackedWidget的属性实例演示效果展示引言 QStackedWidget继承自QFrame。 QStackedWidget类提供了多页面切换的布局,一次只能看到一...
    99+
    2023-02-26
    Qt QStackedWidget使用 Qt QStackedWidget
  • Java使用线程池实现socket编程的方法详解
    目录前言一、一个简单的C/S模型实现1.服务器:2.客户端:二、线程池使用方法1.新建一个线程池2.用Runnable接口实现线程3.创建线程对象并提交至线程池执行三、结合起来四、使...
    99+
    2024-04-02
  • Python中线程threading.Thread的使用详解
    目录1. 线程的概念2. threading.thread()的简单使用2.1 添加线程可以是程序运行更快2.2 主线程会等待所有的子线程结束后才结束3.查看线程数量4.线程参数及顺...
    99+
    2024-04-02
  • qt关闭线程的方法有哪些
    在Qt中,关闭线程有以下几种方法:1. 使用QThread的quit()方法:调用QThread的quit()方法可以停止线程的事件...
    99+
    2023-09-22
    qt
  • QT实现多线程两种方式案例详解
    Qt线程 Qt4.7之前版本处理步骤 1.自定义一个类,继承于QThread。 class MyThread:public QThread{ public: vid ru...
    99+
    2024-04-02
  • Ruby3多线程并行Ractor使用方法详解
    Ruby 3 Ractor官方手册:https://github.com/ruby/ruby/blob/master/doc/ractor.md 在Ruby3之前,使用Thread来...
    99+
    2024-04-02
  • Qt中的线程怎么应用
    今天小编给大家分享一下Qt中的线程怎么应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、多线程操作UI界面的示例下面,是...
    99+
    2023-07-05
  • 详解Java线程池的使用(7种创建方法)
    目录 1. 固定数量的线程池a.  线程池返回结果b. ⾃定义线程池名称或优先级2. 带缓存的线程池3. 执⾏定时任务 a.&nbs...
    99+
    2023-03-24
    Java线程池 Java线程池使用 线程池
  • Python中多线程和线程池的使用方法
    Python是一种高级编程语言,它在众多编程语言中,拥有极高的人气和使用率。Python中的多线程和线程池是其强大的功能之一,可以让我们更加高效地利用CPU资源,提高程序的运行速度。本篇博客将介绍Py...
    99+
    2023-10-12
    python
  • Qt实现线程与定时器的方法
    目录一、定时器QTimer类二、在多线程中使用QTimer1.错误用法2.正确用法一3.正确用法二一、定时器QTimer类 The QTimer class provides rep...
    99+
    2024-04-02
  • Java详解使用线程池处理任务方法
    什么是线程池? 线程池就是一个可以复用线程的技术。 不使用线程池的问题: 如果用户每发起一个请求,后台就创建一个新线程来处理,下次新任务来了又要创建新线程,而创建新线程的开销是很大的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作