首页 > 其他分享 >Qt 使用线程的方式

Qt 使用线程的方式

时间:2023-12-26 12:45:08浏览次数:36  
标签:MyObject Qt 方式 QObject MyThread 线程 public QThread

有两种:

第一种:

1. 需要创建一个线程子类,继承 Qt 的线程类 QThread:

#include <QThread>

class MyThread : public QThread
{
   
};

2. 重写父类的 run()函数,子线程的业务逻辑就在该方法中编写;

 class MyThread : public QThread
{  

public:
    explicit MyThread(XXX    XXXXXX, QObject *parent = nullptr);

    ...
  
protected:
    void run() override;

     ...
}

3.  在主线程中创建子线程对象

MyThread * subThread = new MyThread (XXX );

4. 启动子线程

        subThread->start();

 start()   启动,run()函数运行;

默认的线程为项目的主线程,自己创建的为子线程;

子线程和主线程之间通过信号 和 槽 实现传输:

// 如:
signals:
    void ok (int cnt);
    void  error (const QString &error);
//-------------------------------------

emit error("等待中....!");

//---------------------------------------

  QObject::connect(MyThread, &MyThread::ok,  this, [=](){
    ......
});

 

第二种

1.  需要创建一个类,派生自 类 QObject:

#include <QObject>

class  MyObject: public QObject
{

}

2. 在 MyObject 类中添加公共的成员函数,可以是多个,这些成员函数就是需要的业务逻辑函数;

#include <QObject>

class MyObject: public QObject
{
    Q_OBJECT
public:
    explicit MyObject(QObject *parent = nullptr);

    // 
    void subAAAA(xxxx  xxxxx);
    // 
    void subBBBB(xxxx  xxxxx);

}

subAAAA, subBBBB 就是创建的公共函数
3. 在主线程里面创建Qt 提供的标准 QThread 类对象;
// 创建线程对象
    QThread* t = new QThread;

4.  在主线程里面创建 添加的 MyObject 类 对象

// 创建任务对象
    MyObject*  worker = new MyObject;

5. 将 worker 对应移动到子线程中,使用 moveToThread 函数

worker->moveToThread(t);  // 将worker 移动到 QThread* t  中执行

6.  将子线程和主线程之间通过信号 和 槽 实现传输:

7.  起送子线程,也就是自定义的  QThread* t;

 t->start();

 

标签:MyObject,Qt,方式,QObject,MyThread,线程,public,QThread
From: https://www.cnblogs.com/susiesnai-sun/p/17927881.html

相关文章

  • Java与线程
    实现线程的主要方式:1) 使用内核实现(1:1实现,JDK线程模型采用方式)内核线程(KLT)就是直接由操作系统内核支持的线程,由内核完成线程切换,内核通过操纵调度器对线程进行调度,并负责将线程的任务映射到各个处理器上.程序一般使用内核线程的一种高级接口-轻量级进程(LWP),由于每个轻......
  • FW/IDS/IPS/WAF等安全设备部署方式
    现在市场上的主流网络安全产品可以分为以下几个大类:1.基础防火墙FW/NGFW类 主要是可实现基本包过滤策略的防火墙,这类是有硬件处理、软件处理等,其主要功能实现是限制对IP:port的访问。基本上的实现都是默认情况下关闭所有的通过型访问,只开放允许访问的策略。FW可以拦截低层攻击行......
  • Java多线程:锁机制深入剖析
    在并发编程中,正确地管理资源的访问至关重要。Java提供了多种锁机制来协调多个线程之间对共享资源的访问。本文将深入探讨Java多线程中的锁机制,包括内置锁(synchronized关键字)、显式锁(java.util.concurrent.locks.Lock)以及并发集合(java.util.concurrent)提供的锁机制。1.内置锁(Synchr......
  • 3个最好的网站英语类型的建站方式?
    在当今数字化时代,拥有一个引人注目且功能齐全的网站对于个人和企业来说至关重要。然而,在构建网站时,选择适当的英语类型和建站方式可能会成为一个挑战。本文将介绍三种最佳的网站英语类型的建站方式,以帮助您在互联网上脱颖而出。1.响应式网站设计响应式网站设计是一种以用户为中心......
  • 3个最好的网站英语类型的建站方式?
    在当今数字化时代,拥有一个引人注目且功能齐全的网站对于个人和企业来说至关重要。然而,在构建网站时,选择适当的英语类型和建站方式可能会成为一个挑战。本文将介绍三种最佳的网站英语类型的建站方式,以帮助您在互联网上脱颖而出。1.响应式网站设计响应式网站设计是一种以用户为中心......
  • 3个最好的网站英语类型的建站方式?
    在当今数字化时代,拥有一个引人注目且功能齐全的网站对于个人和企业来说至关重要。然而,在构建网站时,选择适当的英语类型和建站方式可能会成为一个挑战。本文将介绍三种最佳的网站英语类型的建站方式,以帮助您在互联网上脱颖而出。1.响应式网站设计响应式网站设计是一种以用户为中心......
  • [Qt5] VS环境下实现Qt5两个窗口相互切换
    核心思想:通过定义指针显示窗口在VS中新建Qt项目2.通过添加类的方式,再添加一个ui.界面(好处是可以自动生成对应的.cpp和.h文件)方式:右键FormFiles——》添加——》类,选择Qt5GuiClass,添加。3.之后的界面4.在QtFather.ui和QtSon.ui界面分别添加按钮,并且添加槽、声明。.5.在Qt......
  • Java,反射创建对象的两种方式
    跟着孙哥学Spring,b站:https://www.bilibili.com/video/BV185411477k/?spm_id_from=333.337.search-card.all.click在Java中,我们可以使用反射来创建对象。这里有两种主要的方式:1.使用Class.forName().newInstance()方法这种方式是使用默认的无参数构造函数来创建对象。如果......
  • Qt/C++音视频开发61-多屏渲染/一个解码渲染到多个窗口/画面实时同步
    一、前言多屏渲染就是一个解码线程对应多个渲染界面,通过addrender这种方式添加多个绘制窗体,我们经常可以在展会或者卖电视机的地方可以看到很多电视播放的同一个画面,原理应该类似,一个地方负责打开解码播放,将画面同步传输到多个显示的地方,完全保证了画面的一致性。这样相当于复用......
  • HTML5 文件上传的2种方式
    以前上传文件需要提交Form表单。HTML5方式上传文件,可以通过使用FormData类模拟Form表单提交,从而实现无刷新上传文件。 假设有一个文件选择框<inputtype="file"name="pic"id="pic"accept="image/gif"/>有下面2种方式上传文件:1、XMLHttpRequest(有进度事件)varfiles=d......