首页 > 其他分享 >QT多线程

QT多线程

时间:2024-08-14 15:58:28浏览次数:11  
标签:Widget 多线程 QT void Mythread 线程 include 函数

当处理复杂的数据时,此时耗时间,需要多任务处理 就需要用到线程了

qt中使用线程的方法 ,自定义一个类继承QThread

QThread 类中有个虚函数 

void run()才是线程中的处理函数 我们需要重写该函数

但启动线程 不能直接调用run函数,需要通过线程类的start()函数来间接调用run函数

按f4可直接快捷跳转到构造函数中,

按f1可直接跳转到该类的文档中

线程启动调用start()函数

关于关闭线程 有两个函数一个是terminate() 另一个是quit函数

terminate()函数有可能线程运行到一半给你关了,不稳定

而quit函数确保线程运行完后再关闭强烈建议使用

#ifndef MYTHREAD_H
#define MYTHREAD_H

#include <QThread>

class Mythread : public QThread
{
    Q_OBJECT
public:
    explicit Mythread(QObject *parent = nullptr);
protected:
    //qthread的虚函数
    //线程处理函数
    //不能直接调用,通过start间接调用
    virtual void run();
signals:
    void isdone();
};

#endif // MYTHREAD_H

#include "mythread.h"

Mythread::Mythread(QObject *parent)
    : QThread{parent}
{}

void Mythread::run()
{


    //复杂的数据处理,需要耗时

    sleep(5);//等待5s

    emit isdone();
}

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimer>
#include "mythread.h"
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
    QTimer* timer;
   Mythread *thread;//线程对象   调用自定义的类继承了qthread
};
#endif // WIDGET_H

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    timer = new QTimer(this);
    connect(timer,&QTimer::timeout,this,[=](){

        static int num =1;

        ui->lcdNumber->display(num++);
    });


    thread = new Mythread(this);


    connect(thread,&Mythread::isdone,this,[=](){


        timer->stop();
    });
    
    
    
    
    thread->quit();


}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_pushButton_clicked()
{

    timer->start(100);

    //点击时启动线程  处理数据
    thread->start();

}

这个程序的运行效果就是按钮按下后计数器开始计数,当5s过后计数暂停

暂停后计数为45

标签:Widget,多线程,QT,void,Mythread,线程,include,函数
From: https://blog.csdn.net/qq_73937769/article/details/141191641

相关文章

  • windeployqt.exe的使用与避坑(windows平台)
    1.介绍windeployqt.exe是Qt自带的工具,用于创建应用程序发布包。简单来说,这个工具可以自动地将某程序依赖的库、资源拷贝到其所在目录,防止程序在其他电脑上运行报找不到库的错误。这里贴上官方文档:https://doc.qt.io/qt-5/windows-deployment.html本文适用于Windows+Visual......
  • Mqttnet实现的mqtt客户端
    usingSystem.Collections.Concurrent;usingSystem.Text;usingMQTTnet;usingMQTTnet.Client;usingMicrosoft.Extensions.Options;usingMicrosoft.Extensions.Logging;usingMQTTnet.Server;usingMicrosoft.Extensions.Hosting;usingSystem.Net.NetworkInformat......
  • 在Unity中开发MQTT客户端
    概述:        在Unity环境中使用MQTTnet库(一个流行的.NET库,用于实现MQTT客户端和服务器。它支持.NETCore和.NETFramework,并提供了灵活的API以及高性能的实现)搭建自己的MQTT客户端.我使用的版本:Version=4.3.6.1152        但是在开发客户端之前,你需要......
  • c# 多线程环境下对共享资源访问的办法
    Monitor:定义:Monitor 是C#中最基本的同步机制,通过 Enter 和 Exit 方法来控制对共享资源的访问。它提供了排他锁的功能,确保在任何时刻只有一个线程可以访问共享资源。优点:简单易用,适合对临界区进行粗粒度的同步控制。缺点:只能实现排它锁,不能实现读写锁,性能相对较低。......
  • QT 控制台信号与槽简例
    要注意末尾的#include"main.moc"#include<QCoreApplication>#include<QDebug>classF:publicQObject{Q_OBJECTpublic:voidmyslot(intpara){qDebug()<<"myslot:"<<para<<endl;}......
  • QT应用之透明背景
    在嵌入式平台,我们使用的QT会是以QWS方式运行,即会先运行QWSServer,再运行实际的窗体,在该情况下,默认QWS背景会是绿色的,而在嵌入式上,很多方案都会将video和graphic层分开,两层的层叠也是可调的,当需要在video上面做一些控制图标等,此时就需要将gfx调到vid之上,此时就需要将运行于gfx的q......
  • C 多线程
    C多线程C程序中经常同时执行多项任务。例如,一个程序可能:(1)在执行程序过程中通过完成并行任务来提高性能。(2)在处理用户输入的同时,在后台进行耗时的数据通信和实时操作。通过并行执行(concurrentexecution)程序中的部分代码,可以实现不同任务同时进行。特别是在多处理器系......
  • BugKu CTF Misc:被勒索了 & disordered_zip & simple MQTT & 请攻击这个压缩包
    前言BugKu是一个由乌云知识库(wooyun.org)推出的在线漏洞靶场。乌云知识库是一个致力于收集、整理和分享互联网安全漏洞信息的社区平台。BugKu旨在提供一个实践和学习网络安全的平台,供安全爱好者和渗透测试人员进行挑战和练习。它包含了各种不同类型的漏洞场景,如Web漏洞、系统......
  • QSortFilterProxyModel和QTreeView排序功能
    1、需求,创建一个树有多层结构,同一层按照插入顺序逆序排列; ui.treeView->setHeaderHidden(true);//treewidget头标题是否显示,此处隐藏标题//ui.treeWidget->header()->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);ui.treeView->header()->s......
  • 多线程
    多线程1.进程与线程1.1.什么是进程进程就是正在运行的程序,它是系统进行资源分配和调度的基本单位,各个进程之间相互独立,系统给每个进程分配不同的地址空间和资源Win操作系统任务管理器查看应用程序运行的进程1.2.什么是线程线程就是程序(进程)执行的任务(分为单线程和多线程......