Qt实现Kermit协议(六)

3 实现

3.5 KermitFileRecver

该模块实现了Kermit异步接收文件功能。

3.5.1 KermitFileRecver定义

class QSerialPort;
class KermitFileRecver : public QObject
{Q_OBJECT
public:explicit KermitFileRecver(QSerialPort *serial, QObject *parent = nullptr);~KermitFileRecver();
signals:void start_recv(QString const& fileName);void cancel_recv();void gotFileSize(quint64 filesize);void progressInfo(quint32 blockNumber, quint64 bytesOfSend);void finished();void error(QString const& e);
public:void start(QString const& fileName);void stop();void cancel();
private:QThread workerThread;
};

公共接口:

  • start 开始接收文件
  • stop 停止传输文件
  • cancel 中断传输文件

信号:

  • gotFileSize 文件大小信号
  • progressInfo 传输进度信号
  • error 出错信号
  • finished 传输结束信号
  • start_recv 开始接收文件信号
  • cancel_recv 中断传输文件信号

3.5.2 KermitFileRecver实现

3.5.2.1 构造函数/析构函数
KermitFileRecver::KermitFileRecver(QSerialPort *serial, QObject *parent): QObject(parent)
{KermitRecvFile* worker = new KermitRecvFile(serial);serial->moveToThread(&workerThread);worker->moveToThread(&workerThread);connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);connect(this, &KermitFileRecver::start_recv, worker, &KermitRecvFile::start);connect(this, &KermitFileRecver::cancel_recv, worker, &KermitRecvFile::cancel);connect(worker, &KermitRecvFile::gotFileSize, this, &KermitFileRecver::gotFileSize);connect(worker, &KermitRecvFile::progressInfo, this, &KermitFileRecver::progressInfo);connect(worker, &KermitRecvFile::finished, this, &KermitFileRecver::finished);connect(worker, &KermitRecvFile::error, this, &KermitFileRecver::error);workerThread.start();
}KermitFileRecver::~KermitFileRecver()
{workerThread.quit();workerThread.wait();
}

函数说明:

  • 构造函数
    • 将serial和worker移动到workerThread线程
    • 连接信号和槽函数
    • 启动线程
  • 析构函数
    • 退出线程
    • 等待线程退出
3.5.2.2 start/stop/cancel
void KermitFileRecver::start(QString const& fileName)
{emit start_recv(fileName);
}void KermitFileRecver::stop()
{worker->stop();
}void KermitFileRecver::cancel()
{emit cancel_recv();
}

函数说明:

  • start 发送信号start_send开始文件传输
  • stop 调用work函数stop停止操作
  • cancel 发送信号cancel_send取消文件传输操作

Qt实现Kermit协议(五)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/800473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完全二叉树的权值

一道很简单的模拟题但还是有要注意的地方没层要读入的数据量是2的倍数但是最后一层会有不满的使用里面那层循环要写i和j两种判断而且每次加完一层就要比一次所以还要一ii循环但是又不让它增加因为i是读入数据才增加 #include<bits/stdc.h> using namespace std; long lo…

FHE全同态加密简介

1. 何为FHE&#xff1f; FHE (Fully homomorphic encryption)&#xff1a; 是一种隐私技术&#xff0c;支持直接对密文进行计算&#xff0c;而无需对密文先解密再计算。即&#xff0c;任何第三方或云厂商&#xff0c;都可对敏感信息的密文进行处理&#xff0c;而无需访问密文内…

快速安装/升级/卸载Ascend配套软件包的

一、参考资料 配套MindSpore 昇腾软件安装指引&#xff08;23.0.RC3&#xff09; 快速安装CANN 二、安装Ascend配套软件包 1. Ascend配套软件包简介 Ascend配套软件包&#xff0c;包括&#xff1a;固件、驱动和CANN&#xff08;Compute Architecture for Neural Networks&…

近距离共享数字化实战经验,深挖数据价值赋能千行百业

近期&#xff0c;思迈特软件积极投身于金融、制造、零售、医疗等多个行业的线下活动中&#xff0c;深度解析行业趋势&#xff0c;分享BI数字化创新解决方案&#xff0c;并与客户及合作伙伴进行深入交流。通过这些活动&#xff0c;不仅展示了思迈特软件在各领域的先进技术和成果…

【数据结构】双向链表 C++

一、什么是双向链表 1、定义 双向链表也叫双链表&#xff0c;是链表的一种&#xff0c;它的每个数据结点中都有两个指针&#xff0c;分别指向直接后继和直接前驱。所以&#xff0c;从双向链表中的任意一个结点开始&#xff0c;都可以很方便地访问它的前驱结点和后继结点。 双…

fakebook-攻防世界

题目 先目录扫描一下 dirseach 打开flag.php是空白的 访问robots.txt,访问user.php.bak <?php class UserInfo { public $name ""; public $age 0; public $blog ""; public function __construct($name, $age, $blog) { …

2024年【道路运输企业主要负责人】报名考试及道路运输企业主要负责人证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 道路运输企业主要负责人报名考试根据新道路运输企业主要负责人考试大纲要求&#xff0c;安全生产模拟考试一点通将道路运输企业主要负责人模拟考试试题进行汇编&#xff0c;组成一套道路运输企业主要负责人全真模拟考…

【测试开发学习历程】python推导式

Python当 目录 1 列表推导式 2 字典推导式 3 集合推导式 4 生成器推导式 中有如下的推导式&#xff1a; 列表推导式 字典推导式 集合推导式 生成器推导式 推导式的作用是可以快速地生成一个列表、字典或者集合&#xff0c;同时简化代码。 下面我们来介绍一下python中…

vue vue3 日期时间组件分装,三种不同的效果

写在前面&#xff1a; 基于elementPlus前端组件库&#xff0c;实现了两种日期时间组件的自定义封装&#xff1a; 1.第一种&#xff0c;年月日 2.第二种&#xff0c;年月周日 3.第三种&#xff0c;年月日 一、年月日自定义组件的封装 实现效果&#xff1a; 参考链接&#xff1a…

[C语言]二分查找

进行二分查找的前提是在一个有序排列的数组中查找指定元素。 例如&#xff0c;对一个升序排列的整型数组进行二分查找&#xff1a; // 二分查找 // 参数1&#xff1a;arr--需要传入一个有序的、按升序排列&#xff08;从小到大&#xff09;的整型数组 // 参数2&#xff1a;len…

系统学习Python——装饰器:验证函数的参数案例-[实现细节:函数内省]

分类目录&#xff1a;《系统学习Python》总目录 装饰器的代码依赖于内省API和对参数传递的微妙限制。为了完全地通用&#xff0c;原则上我们可以完整模拟Python的参数匹配逻辑&#xff0c;来看看哪个名称以何种模式传入&#xff0c;但是这对于我们的工具来说太复杂了。如果我们…

VueDraggablePlus 支持 Vue2 和 Vue3 的拖拽组件

官网&#xff1a;https://alfred-skyblue.github.io/vue-draggable-plus/

【大功率汽车大灯升压方案】LED恒流驱动芯片FP7208升压车灯调光应用,PWM内部转模拟,调光深度1%,无频闪顾虑,低亮无抖动

宝马X5前中排座椅宽大舒适&#xff0c;车厢内储物空间丰富。操控性能极佳&#xff0c;底盘稳扎精良。原车为氙气灯&#xff0c;其实宝马的氙气大灯配的比其他车型要好&#xff0c;照明效果是没得说的。但是不管什么灯久了都会出现光衰的情况。下面这辆宝马X5车灯已老化严重。 宝…

14届蓝桥杯省赛 C/C++ B组 T4 飞机降落 (DFS)

记录此题提醒自己&#xff0c;此类时间轴问题可以通过DFS解决 DFS不是能解决所有题吗 对于此题&#xff0c;我们将降落的飞机的个数和时间轴作为DFS的形参&#xff0c;这样可以节省手动回溯的过程。 并且在DFS的过程中我们要加入一些贪心策略&#xff0c;否则直接爆搜有可能搜…

怎么使用jwt,token以及redis进行续期?

怎么使用jwt&#xff0c;token以及redis进行续期&#xff1f; 什么是jwt? 什么是token? 结合 JWT、Token 和 Redis 进行续期的一般步骤&#xff1a; 生成 JWT&#xff1a; 用户登录成功后&#xff0c;服务器生成一个 JWT&#xff0c;并返回给客户端。 import io.jsonwebtok…

云原生周刊:2024 年 K8s 基准报告 | 2024.4.8

开源项目推荐 Argo CD Image Updater Argo CD Image Updater 是一个自动更新 Argo CD 管理的 Kubernetes 工作负载容器镜像的工具。简而言之&#xff0c;它将跟踪 Argo CD 应用程序资源上的注释指定的图像版本&#xff0c;并通过使用 Argo CD API 设置参数覆盖来更新它们。 …

【java】java虚拟机JVM

类加载器&#xff08;Class Loader&#xff09; 负责将类的字节码加载到内存中&#xff0c;并生成相应的 Class 对象。类加载器通常采用委托模型&#xff0c;根据特定的加载规则从不同的位置加载类&#xff0c;如本地文件系统、网络等。 运行时数据区 方法区&#xff08;Met…

张老师语录

1. 写文章要点 &#xff08;1&#xff09;整体文章的必须有题目 &#xff08;2&#xff09;必须要有问题描述 &#xff08;3&#xff09;一个文档中的定义是连续的 &#xff08;4&#xff09;在定义中的一些参数符号&#xff0c;不要直接赋值&#xff0c;而是在实验中进行说明 …

yolov8安全帽检测项目开发(python开发,带有训练模型,可以重新训练,并有Pyqt5界面可视化)

不需要程序&#xff0c;只需要数据集的&#xff0c;想自己搭建模型训练的&#xff0c;可以免费下载&#xff08;积分已经设置为0&#xff09;&#xff1a;https://download.csdn.net/download/qq_40840797/89100918 1.项目介绍&#xff1a;&#xff08;视频运行链接&#xff1…

小米SU7会是年轻人第一台“保时米”吗?

2021年3月30日&#xff0c;小米创始人雷军在公开演讲中宣布造车&#xff0c;称 “小米汽车将是我人生中最后一次重大的创业项目&#xff0c;我愿意押上我人生所有积累的战绩和声誉&#xff0c;为小米汽车而战&#xff01;” 雷军表示未来十年&#xff0c;小米将投入100亿美元造…