继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. 深入理解JVM(③)再谈线程安全

    前言 我们在编写程序的时候,一般是有个顺序的,就是先实现再优化,并不是所有的牛P程序都是一次就写出来的,肯定都是不断的优化完善来持续实现的.因此我们在考虑实现高并发程序的时候,要先保证并发的正确性,然 ...

  2. 二、Python系列——time时间格式的转换及计算

    # -*- coding:utf-8 -*- import pandas as pd import time import datetime start_date = '2020-06-08' # 一 ...

  3. 软件测试大牛都是这样写测试用例的,你get到了嘛?

    1. 用于语句覆盖的基路径法 基路径法保证设计出的测试用例,使程序的每一个可执行语句至少执行一次,即实现语句覆盖.基路径法是理论与应用脱节的典型,基本上没有应用价值,读者稍作了解即可,不必理解和掌握. ...

  4. P5198 [USACO19JAN]Icy Perimeter S (洛谷) (水搜索)

    同样是因为洛谷作业不会写…… 写(水)博客啦. 直接放题目吧,感觉放在代码框里好看点 Farmer John要开始他的冰激凌生意了!他制造了一台可以生产冰激凌球的机器,然而不幸的是形状不太规则,所以他 ...

  5. 项目管理:如何显性管理并提升Story分解能力

    引言: 在“DevOps能力之屋(CapabilitiesHouse of DevOps)”中,华为云DevCloud提出(工程方法+最佳实践+生态)×工具平台=DevOps能力.华为云DevClou ...

  6. Keras之对鸢尾花识别

    Keras之队鸢尾花识别 任务目标 对鸢尾花数据集分析 建立鸢尾花的模型 利用模型预测鸢尾花的类别 环境搭建 pycharm编辑器搭建python3.* 第三方库 numpy pandas sklea ...

  7. RabbitMQ 入门之基础概念

    什么是消息队列(MQ) 消息是在不同应用间传递的数据.这里的消息可以非常简单,比如只包含字符串,也可以非常复杂,包含多个嵌套的对象.消息队列(Message Queue)简单来说就是一种应用程序间的通 ...

  8. 题解 CF786B 【Legacy】

    本题要求我们支持三种操作: ① 点向点连边. ② 点向区间连边. ③ 区间向点连边. 然后跑最短路得出答案. 考虑使用线段树优化建图. 建两颗线段树,入树和出树,每个节点为一段区间的原节点集合.入树内 ...

  9. 题解 UVA501 【Black Box】

    思路与中位数一题,解决方案比较像,使用对顶堆来解决. 具体实现为,使用两个堆,大根堆维护较小的值,小根堆维护较大的值,即小根堆的堆顶是较大的数中最小的,大根堆的堆顶是较小的数中最大的. 将大于大根堆堆 ...

  10. 趣学Python编程PDF高清完整版免费下载|百度网盘

    百度网盘:趣学Python编程PDF高清完整版免费下载 提取码:ts47 内容简介 python是一款解释型.面向对象.动态数据类型的高级程序设计语言.python语法简捷而清晰,具有丰富和强大的类库 ...