继Qt之先用了再说系列-多线程方式2

  本次说说在Qt里多线程使用第2种方式,也是qt官方比较推荐用的方式,相对与直接继承QThread 重写run方法中灵活了一些,如果第一次使用可能会转不湾来,没有直接重写run来的方便些,等等你多用几遍你自己也会分辨那种适合自己了。。。。

    好了  ,开始准备工作。。。。

     开始之前,想说一下,,, 很多时候要达到某种目的,我们总要重写某些函数,,比如,你点击窗体关闭的时候,你希望点击关闭按钮需要弹出对话框用二次确认是否真关闭窗口,那这个时候怎么办呢?这个时候我们就需要重写closeEvent函数,这样就能达到我们的目的了。而closeEvent从哪儿来的,就是从继承过来的,,所以。。。我们开始说线程

  1>先创建一个类,记住一定要继承QObject

//这是头文件.h
#include<QObject> class A:public QObject //这里一要继承QObject
{
public:
//构造函数
// 析构函数 //我们希望子线程运行的函数,这里我随便写了3个
public slots:
void onThreadFun1(); //成员函数1,随便命名
void onThreadFun2(); //成员函数2,随便命名
void onThreadFun3(); //成员函数3,随便命名 }
//这是源文件.cpp

析构,构造....省略

void A::OnThreadFun1()
{
  qDebug()<<"子线程运行1";
} void A::OnThreadFun2()
{
qDebug()<<"子线程运行2";
} void A::OnThreadFun3()
{
qDebug()<<"子线程运行3";
}

 

  2>上面创建好了这类以后,接下来我看看如何调用才会在子线程中运行,看看跟重载run是否一样

为了说明,假设有个B类,这个类,就相当与我用向导创造出来的那个默认的widget类一样,你就把他当做widget就可以了

按照下面6个步骤填写,只要一执行到步骤6,onThreadFun1(),onThreadFun2(),onThreadFun3(), 就会在子线程中运行了,步骤6相当于run中使用start()函数一样。

#include "A.h"  //包含我们写的头文件
#include <QThread> //线程类,必须包含 int main()
{
A a; //步骤1:声明一个对象
QThread thread1; //步骤2:声明一个线程对象 a.moveToThread(thread1); //步骤3:把a这个对象移动到thread1线程中
thread1.start(); // 步骤4:开启线程,此时线程并没有执行,只是开启,先不管,记住步骤 //假设有个B类,里面有个信号click,为了简单说明
connect(b,&B::click,a,&A::onThreadFun1); //步骤5:连接A类,我们写的函数
connect(b,&B::click,a,&A::onThreadFun2); //步骤5:连接A类,我们写的函数
connect(b,&B::click,a,&A::onThreadFun3); //步骤5:连接A类,我们写的函数 emit b.click(); //步骤6:发射信号,相当与重写run函数中,用start()开启一样 }

  

 结语:此类多线程方法相对与重写run函数会复杂一点点,但是可以看到,子线程运行的函数有3个或者还有更多,看你自己喜欢。。。相对与重写run中,只有run中才是子线程是不是多了点好处。。。。。。

 

   机制:  通过发射信号,槽函数onThreadFun1(),onThreadFun2(),onThreadFun3(),接受到信号运行,此时运行线程会是子线程。

   核心:a.moveToThread(thread1);   thread1.start();  正因为有了这两句,槽函数才能在子线程中运行。。。

 

学会方法:,,,多写几次,理解理解就ok了,第一次是很痛苦的,为什么他要这么做。。。。。。越深究,还有connect的第5个参数呢,,什么?还有第5个参数。。。。。。

 

先用了再说。。。。。。

    

Qt之先用了再说系列-多线程方式2的更多相关文章

  1. Qt之先用了再说系列-多线程方式1

    Qt 多线程的用法还是比较简单的,也比较好用,接下来我们就分析分析如何使用. 说起Qt 线程的使用方式,一般有2种使用方式,具体哪种比较好看自己心情了,现在有官方的推荐用法,用不用还是看你心情的 好, ...

  2. 移动开发在路上-- IOS移动开发系列 多线程二

    最近太忙没太多的时间,忙碌的码农生活空下来一点时间,都会挤出来看一些技术或者咨询的文章,废话不多说,直奔主题. 接着上一次的继续说. 定时器在多线程的使用 NSRunLoop 是线程相关的基础框架的一 ...

  3. 【ALB技术笔记】基于多线程方式的串行通信接口数据接收案例

    基于多线程方式的串行通信接口数据接收案例 广东职业技术技术学院  欧浩源 1.案例背景 在本博客的<[CC2530入门教程-06]CC2530的ADC工作原理与应用>中实现了电压数据采集的 ...

  4. 【ALB学习笔记】基于多线程方式的串行通信接口数据接收案例

    基于多线程方式的串行通信接口数据接收案例 广东职业技术技术学院  欧浩源 1.案例背景 在本博客的<[CC2530入门教程-06]CC2530的ADC工作原理与应用>中实现了电压数据采集的 ...

  5. java 网络编程基础 TCP/IP协议:服务端ServerSocket;客户端Socket; 采用多线程方式处理网络请求

    1.Java中客户端和服务器端通信的简单实例 Java中能接收其他通信实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一 ...

  6. Qt封装QTcpServer参考资料--QT4中构建多线程的服务器

    首先说一下对多线程这个名词的理解过程.以前听说过很多次多线程这个词,而且往往与服务器联系起来,因此一直把多线程误解为服务器特有的功能:直到这次课程设计,仔细学习了一下多线程的机制,才知道真正的意思.简 ...

  7. 【QT】子类化QObject+moveToThread实现多线程

    往期链接: <QThread源码浅析> <子类化QThread实现多线程> 从往期<QThread源码浅析>可知,在Qt4.4之前,run 是纯虚函数,必须子类化Q ...

  8. Qt之先用了再说系列-信号与槽

    QT之信号与槽 简介:信号与槽可是Qt最大成功点,也是整个Qt基本核心机制,如果不会信号与槽,将无法领略Qt之美: 1.信号与槽函数原型: QObject::connect(const QObject ...

  9. C#基础系列——多线程的常见用法详解

    前言:前面几节分别介绍了下C#基础技术中的反射.特性.泛型.序列化.扩展方法.Linq to Xml等,这篇跟着来介绍下C#的另一基础技术的使用.最近项目有点紧张,所以准备也不是特别充分.此篇就主要从 ...

随机推荐

  1. bzoj3732Network

    bzoj3732Network 题意: 给一个无向图,k个询问求节点a到节点b最长边的最小值.n,k≤15000. 题解: ”最长边的最小值“经常可以用最小生成树解决,因为生成树里的每一条边都是可取的 ...

  2. 媳妇儿喜欢玩某音中的动漫特效,那我就用python做一个图片转化软件。

    ​    最近某音上的动漫特效特别火,很多人都玩着动漫肖像,我媳妇儿也不例外.看着她这么喜欢这个特效,我决定做一个图片处理工具,这样媳妇儿的动漫头像就有着落了.编码    为了快速实现我们的目标,我们 ...

  3. J.U.C体系进阶(三)- juc-atomic 原子类框架

    Java - J.U.C体系进阶 作者:Kerwin 邮箱:806857264@qq.com 说到做到,就是我的忍道! juc-atomic 原子类框架 AtomicInteger AtomicInt ...

  4. 足球动图gif(一)

  5. p71_文件传送协议FTP

    一.FTP服务器和用户端 FTP是基于客户/服务器(C/S) 的协议. 用户通过一一个客户机程序连接至在远程计算机上运行的服务器程序. 依照FTP协议提供服务,进行文件传送的计算机就是FTP服务器. ...

  6. 如果你还不知道如何控制springboot中bean的加载顺序,那你一定要看此篇

    1.为什么需要控制加载顺序 springboot遵从约定大于配置的原则,极大程度的解决了配置繁琐的问题.在此基础上,又提供了spi机制,用spring.factories可以完成一个小组件的自动装配功 ...

  7. win10里面怎么获取最高管理员权限

    Windows10专业版 1,按下win+R键唤出“运行”窗口,输入gpedit.msc. 2,这时打开了组策略编辑器,在左边找到“计算机配置-Windows 设置”,再进入右边“安全设置”,如图. ...

  8. 干货分享丨玩转物联网IoTDA服务系列五-智能家居煤气检测联动

    摘要:该场景主要描述的是设备可以通过LWM2M协议与物联网平台进行交互,用户可以在控制台或通过应用侧接口创建设备联动规则,把设备上报的属性转发,通过物联网平台规则引擎转变成命令下发给其他指定设备. 场 ...

  9. Redis简介与部署

    一.简介 Redis是什么?redis是一款基于BSD协议,开源的非关系型数据库(nosql数据库),作者是意大利开发者Salvatore Sanfilippo在2009年发布,使用C语言编写:red ...

  10. Flask框架(一):介绍与环境搭建

    1.Flask介绍 Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架. Flask 本身相当于一个内核, ...