当前位置: 首页 > news >正文

构建一个CAN报文周期任务类

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、can周期任务类构建
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

最近想着有时间实现总线报文收发的动态的配置,今天特记录一下报文周期任务的动态的创建和移除


提示:以下是本篇文章正文内容,下面案例可供参考

一、can周期任务类构建

代码如下(示例):

import threading
import timeclass CycleTask():def __init__(self):self.__task_dict = dict()  # 周期任务的标志位字典self.__task_queue = dict()  # 周期任务需发送的数据字典,{cycle_time:{msg_obj:data}}self.__lock_dict = dict()  # 每个线程对应的线程锁def create_task(self, cycle_time):"""功能:创建周期任务参数1:周期时间"""self.__create_task_thread(cycle_time)def __create_task_thread(self, cycle_time):"""功能:创建周期线程参数1:事件"""task = threading.Thread(target=self.__task, args=(cycle_time,))task.start()def __task(self, cycle_time):"""功能:周期任务函数参数1:周期事件"""lock = threading.Lock()self.__lock_dict[cycle_time] = locktask_flag = Trueself.__task_dict[cycle_time] = task_flagwhile self.__task_dict[cycle_time]:self.__lock_dict[cycle_time].acquire()  # 线程上锁for msg, data in self.__task_queue[cycle_time].items():passself.__lock_dict[cycle_time].release()  # 线程下锁time.sleep(cycle_time)def cycle_send_data(self, cycle_time, msg, data):"""功能:将报文进行周期发送参数1:周期事件参数2:报文对象参数3:数据列表"""if cycle_time in self.__task_queue:self.__lock_dict[cycle_time].acquire()  # 线程上锁self.__task_queue[cycle_time][msg] = data  # {cycle_time:{msg_obj:data}}self.__lock_dict[cycle_time].release()  # 线程下锁else:self.__task_queue[cycle_time] = dict()self.__task_queue[cycle_time][msg] = datadef cycle_msg_stop(self, cycle_time, msg):"""功能:停止报文周期发送参数1:周期事件参数2:报文对象"""self.__lock_dict[cycle_time].acquire()  # 线程上锁del self.__task_queue[cycle_time][msg]self.__lock_dict[cycle_time].release()  # 线程下锁if not self.__task_queue:  # 当周期任务中没有self.__task_dict[cycle_time] = False

总结

我是一名车载集成测试开发工程师,希望能和志同道合的朋友一起相互学习进步

相关文章:

构建一个CAN报文周期任务类

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、can周期任务类构建总结 前言 提示:这里可以添加本文要记录的大概内容: 最近想着有时间实现总线报文收发的动态的配置,…...

深入理解计算机系统CS213 - Lecture 02

Bits, Bytes, and Integer 1.位运算与条件运算 &&#xff0c;|&#xff0c;^&#xff0c;~ 是做位运算。诸位01运算。 &&&#xff0c;||&#xff0c;&#xff01;是判断条件真假&#xff0c;而后返回0或1。 2. 位移 x << y&#xff1a;左移y位&#xff…...

【KVM】KVM介绍及功能概述

前言 大家好&#xff0c;我是秋意零。 今天介绍的内容是KVM的概述&#xff0c;以及它所支持的基本功能。 &#x1f47f; 简介 &#x1f3e0; 个人主页&#xff1a; 秋意零&#x1f525; 账号&#xff1a;全平台同名&#xff0c; 秋意零 账号创作者、 云社区 创建者&#x1f…...

centos7安装MySQL

引言 在安装与卸载的时候&#xff0c;用户全部要切换为root 在使用MySQL的时候&#xff0c;尽量使用root权限&#xff0c;便于使用&#xff08;root权限不会开的可以去百度找一下自己服务器类型的开启方式&#xff09;在本文章我将使用xshell7进行操作&#xff0c;你也可以使用…...

leetcode做题笔记215. 数组中的第K个最大元素

给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5,6,4], k 2…...

Linux Vim撤销和恢复撤销快捷键

使用 Vim 编辑文件内容时&#xff0c;经常会有如下 2 种需求&#xff1a; 对文件内容做了修改之后&#xff0c;却发现整个修改过程是错误或者没有必要的&#xff0c;想将文件恢复到修改之前的样子。 将文件内容恢复之后&#xff0c;经过仔细考虑&#xff0c;又感觉还是刚才修改…...

【BUG】记一次Maven install 报错 Could not find artifact ...:pom:0.0.1-SNAPSHOT

问题描述 创建一个maven多模块项目&#xff0c;执行install报错Could not find artifact …:pom:0.0.1-SNAPSHOT&#xff0c;然后点击clean也是报错。 原因分析&#xff1a; 从错误日志发现提示无法从远程maven仓库下载父模块&#xff0c;一看应该是哪里配置了强制从远程仓库…...

逆向学习记录(4)adb

adb用于PC和手机端通讯。 常用命令如下&#xff1a; 如果不是模拟器&#xff08;模拟器一般都有自己的adb&#xff09;&#xff0c;adb会出现在Andirod的SDK中&#xff0c;路径为&#xff1a;Android/SDK/platform-tools。 最好加入环境变量中。...

Windows Server 2016使用MBR2GPT.EXE教程!

什么是MBR2GPT.exe&#xff1f; MBR2GPT.exe是微软提供的专业工具&#xff0c;可在命令提示符下运行。使用该工具可以将引导磁盘从MBR转换为GPT分区样式&#xff0c;而无需修改或删除所选磁盘上的任何内容。 在Windows Server 2019和Windows 10&#xff08;1703…...

SpringBoot项目多环境开发

1.yml文件&#xff08;旧&#xff09; 说明&#xff1a;旧的写法。 #应用环境 spring:profiles:active: dev --- #设置环境#生产环境 spring:profiles: pro server:port: 81--- #开发环境 spirng:profiles: dev server:port: 81--- #测试环境 spring:profiles: test server:p…...

godot4实现一个单例类,作为公共数据共享类

在 Godot 4 中&#xff0c;你可以通过创建一个自动加载的脚本来实现单例类&#xff0c;用于作为公共的数据总线。你需要做的是&#xff1a; 1. 创建一个新的 GDScript 文件&#xff0c;例如 GlobalData.gd&#xff0c;并在其中定义你想要共享的变量和函数。 2. 然后&#xff0…...

AcWing - 5287. 数量 - 组合数求解+思维

最多只有k个位置满足&#xff0c;ai ! i 所以从0-k进行遍历&#xff0c;对于kj&#xff1a; 0时&#xff0c;所有位置上的数字都等于i&#xff0c;只有一种 1时&#xff0c;没有 2时&#xff0c;排列只有两种&#xff0c;1 2 或者 2 1&#xff0c;只有一种情况满足 同理3和4可以…...

《实战:如何搭建一个完整的 Vue2.0 项目》- 7、Vue2.x 项目 webpack 4 升级 5(半自动升级)

1.自动升级 先全局安装升级插件 npm i npm-check npm-check-updates -g检查依赖 npm-check更新检查后的依赖并展示版本号&#xff0c;此时 package.json还没有更新 npm-check-updates升级 package.json&#xff0c;下图显示更新版本&#xff0c;此时 package.json文件已变更…...

Python教程---Python基础语法2

1.变量和字面量(常量) 字面量就是一个一个的值,比如:1,2,3,4,5,6,‘HELLO’ 字面量所表示的意思就是它的字面的值,在程序中可以直接使用字面量 变量(variable)变量可以用来保存字面量,并且变量中保存的字面量是不定的变量本身没有任何意思,它会根据不同的字面量…...

Conda创建软件安装环境

Conda 安装软件并创建环境 Python创建虚拟环境 conda create -n env_name python3.11 进入创建的虚拟环境 conda activate env_name 安装软件 conda install -c bioconda software_name...

MySQL | MySQL 为什么不推荐使用JOIN

MySQL 为什么不推荐使用JOIN MySQL 不推荐使用 JOIN 的说法是过于简化的。实际上&#xff0c;在某些情况下使用 JOIN 是非常有用的&#xff0c;但在其他情况下可能会带来性能问题、复杂性和可维护性问题以及重复数据等问题。 首先我们需要知道JOIN语句是用于将多个表中的数据…...

[LeetCode] 1.两数之和

一、题目描述 给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值 target的那两个整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素不能使用两遍。 你可以按任意顺序返回答…...

ruby语言怎么写个通用爬虫程序?

Ruby语言爬虫是指使用Ruby编写的网络爬虫程序&#xff0c;用于自动化地从互联网上获取数据。其中&#xff0c;CRawler是一个基于文本的小型地牢爬虫&#xff0c;它被设计为可扩展&#xff0c;所有游戏数据均通过JSON文件提供&#xff0c;程序仅处理游戏引擎。除此之外&#xff…...

7 交换机与VLAN

1、拓扑结构是怎么形成的&#xff1f; 举例&#xff1a;办公楼里的每一个楼层可能会有几百台机器&#xff0c;显然需要N个交换机。 交换机之间连接起来&#xff0c;就形成一个稍微复杂的拓扑结构2、两台交换机的情形 1.两台交换机连接着三个局域网&#xff0c;每个局域网上都…...

C++指针笔记

一.定义 是什么&#xff1f; 指针就是地址&#xff0c;相当于门牌号。通过 0x0000也可以拿到该地址里的数据&#xff0c; 可是如果每创建一个变量都要去记住地址编号不太方便我们使用数据&#xff0c;所以才有变量。作用&#xff1f; 通过指针(地址)间接访问内存。内存的编号…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...