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

10 篇文章 3 订阅

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


注意下面
如果有车载讨论需要的小伙伴,可以私信加我微信,拉你进群,和同行业大佬交流
注意上面

前言

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

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


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

一、can周期任务类构建

代码如下(示例):

import threading
import time


class 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] = lock
        task_flag = True
        self.__task_dict[cycle_time] = task_flag
        while self.__task_dict[cycle_time]:
            self.__lock_dict[cycle_time].acquire()  # 线程上锁
            for msg, data in self.__task_queue[cycle_time].items():
                pass
            self.__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] = data

    def 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


总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值