当前位置: 首页 > 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

总结

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

http://www.lryc.cn/news/219218.html

相关文章:

  • 深入理解计算机系统CS213 - Lecture 02
  • 【KVM】KVM介绍及功能概述
  • centos7安装MySQL
  • leetcode做题笔记215. 数组中的第K个最大元素
  • Linux Vim撤销和恢复撤销快捷键
  • 【BUG】记一次Maven install 报错 Could not find artifact ...:pom:0.0.1-SNAPSHOT
  • 逆向学习记录(4)adb
  • Windows Server 2016使用MBR2GPT.EXE教程!
  • SpringBoot项目多环境开发
  • godot4实现一个单例类,作为公共数据共享类
  • AcWing - 5287. 数量 - 组合数求解+思维
  • 《实战:如何搭建一个完整的 Vue2.0 项目》- 7、Vue2.x 项目 webpack 4 升级 5(半自动升级)
  • Python教程---Python基础语法2
  • Conda创建软件安装环境
  • MySQL | MySQL 为什么不推荐使用JOIN
  • [LeetCode] 1.两数之和
  • ruby语言怎么写个通用爬虫程序?
  • 7 交换机与VLAN
  • C++指针笔记
  • vue中app.use()做了什么
  • 【网安AIGC专题11.1】论文12:理解和解释代码,GPT-3大型语言模型学生创建的代码解释比较+错误代码的解释(是否可以发现并改正)
  • 【GEE】4、 Google 地球引擎中的数据导入和导出
  • 【C++】特殊类设计+类型转换+IO流
  • JAVA整理学习实例(一)面向对象
  • QT 实现解密m3u8文件
  • 论文阅读—— BiFormer(cvpr2023)
  • 理解 fopen的 rwa r+w+a+ 参数含义
  • 【强化学习】17 ——DDPG(Deep Deterministic Policy Gradient)
  • 驱动开发11-2 编写SPI驱动程序-点亮数码管
  • Java使用pdfbox进行pdf和图片之间的转换