CN111124621A - 一种基于多线程定时器读取can数据方法及系统 - Google Patents

一种基于多线程定时器读取can数据方法及系统 Download PDF

Info

Publication number
CN111124621A
CN111124621A CN201911149285.4A CN201911149285A CN111124621A CN 111124621 A CN111124621 A CN 111124621A CN 201911149285 A CN201911149285 A CN 201911149285A CN 111124621 A CN111124621 A CN 111124621A
Authority
CN
China
Prior art keywords
timer
data
time
thread
slot
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
CN201911149285.4A
Other languages
English (en)
Inventor
蔡明志
崔熠凡
于金铃
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing Tongrun New Energy Co ltd
Original Assignee
Nanjing Tongrun New Energy Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing Tongrun New Energy Co ltd filed Critical Nanjing Tongrun New Energy Co ltd
Priority to CN201911149285.4A priority Critical patent/CN111124621A/zh
Publication of CN111124621A publication Critical patent/CN111124621A/zh
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明提出了一种基于多线程定时器读取CAN数据方法及系统,其中,该多线程定时器读取CAN数据方法包括:配置多线程定时器和触发时间,在定时器触发事件中获取缓存区中数据长度并插入指针,通过指针把数据插入到同一个列表中,按照通讯规则解析每个数据对应一个哈希值,界面运行过程运行窗口定时器刷新界面数据。本申请解决窗口定时器,处理数据并刷新界面时系统开销大界面卡顿问题,运用多线程原理前台显示和后台数据处理相分离,减小系统开销。数据解析按照指定规则,进行数据的重组和分析,数据存储在预先设定的哈希表内,哈希表根据关键码值而直接进行数据访问,也就是说通过关键码值映射到表中一个位置访问数据,加快数据查找速度。

Description

一种基于多线程定时器读取CAN数据方法及系统
技术领域
本发明涉及一种基于多线程定时器读取CAN数据方法,属于CAN总线通讯领域。
背景技术
CAN总线的数据通信具有突出的可靠性、实时性和灵活性。由于其良好的性能及独特的设计,CAN总线越来越受到人们的重视,它在汽车领域上的应用是最广泛的。世界上一些著名的汽车制造厂商大都采用了CAN总线来实现汽车内部控制系统与各检测和执行机构间的数据通信。同时,由于CAN总线本身的特点,其应用范围目前已不再局限于汽车行业,而向自动控制、航空航天、航海、过程工业、机械工业、纺织机械、农用机械、机器人、数控机床、医疗器械及传感器等领域发展。
随着应用广泛,CAN网络中节点较多,网络复杂,依靠人力来维护CAN系统已经是力不从心,不仅效率低,而且麻烦。需要借助计算技术解析CAN数据实现实时监控,及时发现故障,从而使维护从被动的、繁琐的人工解析改变为自动化监控,减轻维护强度,提高维护质量。
随着计算机技术发展,线程定时器得到越来越多的应用。这里首先描述一下关于线程定时器的几个基本概念:1)定时器是指在指定的时间点或者指定的时间范围内触发预先设定好的事件的硬件或者软件的具体实现;定时器事件是指,需要在某个时间点或者时间范围内,做某件事情的一个数据结构实体;2)线程是操作系统分配处理器时间的基本单位,在进程中可以有多个线程同时执行代码。
在现有技术中,有很多种方法实现CAN数据分析。但是,这些方法只适合于数据量不大,刷新速度慢,对于海量数据且时间要求比较高的情况,现有技术中缺少比较好的实现方法。目前常见的窗口定时器数据处理方案是按照定时器时间触发后,读取CAN 缓存区数据,并进行解析和显示。此方案无法分层管理,解析规则变化或者界面变动时,调整难度较大。数据解析和界面刷新在同一线程内,系统开销大,浪费内存定时器和 UI更新处于同一线程,每次进入定时器界面卡顿。
发明内容
发明目的:提供一种基于多线程定时器读取CAN数据方法,以解决现有技术存在的上述不足。进一步目的是提供一种实现上述方法的系统。
技术方案:一种基于多线程定时器读取CAN数据方法,包括以下步骤:
步骤1、创建CAN数据对象,设计CAN数据属性、CAN方法,在构造函数中引用多线程高精度定时器,设置定时器时间、指定委托事件和运行状态;
步骤2、定时时间到达后关闭定时器执行委托事件,获取CAN接收数据缓存区的数据长度;
步骤3、在主窗体中声明委托方法实现多线程下操作控件;
步骤4、主窗体定时器到达后关闭定时器,调用委托方法,在委托方法中判断哈希表元素个数是否满足要求。
在进一步的实施例中,所述步骤1进一步包括:
步骤1-1、开启定时器,指定定时时常和超时回调函数,将不同时常的定时器散列在时间轮的对应槽中,每个槽中的定时器以双向链式存储,在运行到某个槽时,遍历链表一次,检查是否有到达时间的计时器,如检测到到达时间的定时器则删除结点;
步骤1-2、根据定时器的参数生成TimerNode节点,当定时器的时长大于N个时间片长度,则将该定时器节点添加至第P号轮组,并计算该定时器位于该轮组的第0级至第3级时间轮上的位置:
P[0]=t_exp%R0
Figure RE-GDA0002362350920000021
Figure RE-GDA0002362350920000022
Figure RE-GDA0002362350920000023
其中,
Figure RE-GDA0002362350920000024
式中,T_NOW表示定时器当前所在时刻,T_START表示定时器管理算法开始的时刻,T_SLOT表示定时器的时隙即时间片长度,P[0]表示第0级时间轮上的第0号槽,P[1] 表示第1级时间轮上的第1号槽,P[2]表示第2级时间轮上的第2号槽,P[3]表示第3 级时间轮上的第3号槽,interval表示定时器的定时时长,R0、R1、R2、R3分别表示第0级、第1级、第2级、第3级的槽数;
步骤1-3、引入基于高速缓存的时间轮改进算法,由一个主线程和N个子线程协同完成,主线程在时间轮上以顺时针每隔一个T_SLOT时间访问一个槽,每访问一个槽执行一次perTick操作,时间轮的第j个槽的访问结束后通知第j号子线程,第j号子线程收到通知后在第j组轮组中查找T_SLOT*N时间内超时的定时器,并将查找结果添加至时间轮的第j号槽中。
在进一步的实施例中,所述步骤1-3进一步包括:
步骤1-3a、对于上下文树中的每个节点,利用存储与节点内部的数据计算出估计概率:
Figure RE-GDA0002362350920000031
式中,
Figure RE-GDA0002362350920000032
由无记忆信息源产生,a表示
Figure RE-GDA0002362350920000033
队列中0的个数,b表示
Figure RE-GDA0002362350920000034
队列中1的个数;
步骤1-3b、采用ZR估算法降低信息源的参数冗余度:
Figure RE-GDA0002362350920000035
式中,各符号含义同上;
步骤1-3c、计算信息源的参数冗余度:
Figure RE-GDA0002362350920000036
式中,各符号含义同上。
在进一步的实施例中,所述步骤2进一步包括:
在非托管模式下,在内存中开辟与缓存区的数据相等的空间;使用指针把缓存区的数据复制到内存中并清空CAN缓存区;把内存中数据插入链表中并释放内存;获取列表中对应数据类型帧数,按照数据帧数循环读取每帧数据,按照通讯规则解析每个数据对应一个哈希值,存在哈希表内。
在进一步的实施例中,所述步骤3进一步包括:
主窗体下引用多线程高精度定时器;设置定时器时间、运行状态;使用.NET框架在异步线程下完成一次异步调用,.NET框架将异步请求队列加入线程池,以线程池内的线程处理异步请求,当所有的线程都处于忙碌状态,则使用新的异步调用置于等待队列,直到线程池产生新的可用线程。
在进一步的实施例中,所述步骤4进一步包括:
步骤4-1、利用反射技术批量获取控件,哈希表的值对应传递给控件;刷新完成后开启定时器;
步骤4-2、构件演化系统基于XML文件建立构件演化策略解析,由系统的演化模块读取XML配置文件的内容,由演化策略解析模块首先定位到Evolution节点,判断改节点的子节点列表是否为空;
步骤4-3、若子节点的列表为空,则由构件演化系统依次获取element节点,得到需要演化的构件名,并得到需要改变底层实现function节点的内容;
步骤4-4、由系统的构件演化模块进行构件的动态更新,从而完成演化策略解析的过程。
一种基于多线程定时器读取CAN数据方法,包括以下模块:
用于创建CAN数据对象的第一模块;
用于获取CAN接收数据缓存区的数据长度的第二模块;
用于在主窗体中声明委托方法实现多线程下操作控件的第三模块;
用于在委托方法中判断哈希表元素个数是否满足要求的第四模块。
在进一步的实施例中,所述第一模块进一步用于设计CAN数据属性、CAN方法,在构造函数中引用多线程高精度定时器,设置定时器时间、指定委托事件和运行状态:
所述第二模块进一步用于在非托管模式下,在内存中开辟与缓存区的数据相等的空间;使用指针把缓存区的数据复制到内存中并清空CAN缓存区;把内存中数据插入链表中并释放内存;获取列表中对应数据类型帧数,按照数据帧数循环读取每帧数据,按照通讯规则解析每个数据对应一个哈希值,存在哈希表内;
所述第三模块进一步用于在主窗体下引用多线程高精度定时器;设置定时器时间、运行状态;使用.NET框架在异步线程下完成一次异步调用,.NET框架将异步请求队列加入线程池,以线程池内的线程处理异步请求,当所有的线程都处于忙碌状态,则使用新的异步调用置于等待队列,直到线程池产生新的可用线程;
所述第四模块进一步用于利用反射技术批量获取控件,哈希表的值对应传递给控件;刷新完成后开启定时器;构件演化系统基于XML文件建立构件演化策略解析,由系统的演化模块读取XML配置文件的内容,由演化策略解析模块首先定位到Evolution节点,判断改节点的子节点列表是否为空;若子节点的列表为空,则由构件演化系统依次获取element节点,得到需要演化的构件名,并得到需要改变底层实现function节点的内容;由系统的构件演化模块进行构件的动态更新,从而完成演化策略解析的过程。
在进一步的实施例中,所述第一模块进一步用于开启定时器,指定定时时常和超时回调函数,将不同时常的定时器散列在时间轮的对应槽中,每个槽中的定时器以双向链式存储,在运行到某个槽时,遍历链表一次,检查是否有到达时间的计时器,如检测到到达时间的定时器则删除结点;
根据定时器的参数生成TimerNode节点,当定时器的时长大于N个时间片长度,则将该定时器节点添加至第P号轮组,并计算该定时器位于该轮组的第0级至第3级时间轮上的位置:
P[0]=t_exp%R0
Figure RE-GDA0002362350920000051
Figure RE-GDA0002362350920000052
Figure RE-GDA0002362350920000053
其中,
Figure RE-GDA0002362350920000054
式中,T_NOW表示定时器当前所在时刻,T_START表示定时器管理算法开始的时刻,T_SLOT表示定时器的时隙即时间片长度,P[0]表示第0级时间轮上的第0号槽,P[1] 表示第1级时间轮上的第1号槽,P[2]表示第2级时间轮上的第2号槽,P[3]表示第3 级时间轮上的第3号槽,interval表示定时器的定时时长,R0、R1、R2、R3分别表示第0级、第1级、第2级、第3级的槽数;
引入基于高速缓存的时间轮改进算法,由一个主线程和N个子线程协同完成,主线程在时间轮上以顺时针每隔一个T_SLOT时间访问一个槽,每访问一个槽执行一次 perTick操作,时间轮的第j个槽的访问结束后通知第j号子线程,第j号子线程收到通知后在第j组轮组中查找T_SLOT*N时间内超时的定时器,并将查找结果添加至时间轮的第j号槽中。
在进一步的实施例中,所述第一模块进一步用于对于上下文树中的每个节点,利用存储与节点内部的数据计算出估计概率:
Figure RE-GDA0002362350920000061
式中,
Figure RE-GDA0002362350920000062
由无记忆信息源产生,a表示
Figure RE-GDA0002362350920000063
队列中0的个数,b表示
Figure RE-GDA0002362350920000064
队列中1的个数;
采用ZR估算法降低信息源的参数冗余度:
Figure RE-GDA0002362350920000065
式中,
Figure RE-GDA0002362350920000066
由无记忆信息源产生,a表示
Figure RE-GDA0002362350920000067
队列中0的个数,b表示
Figure RE-GDA0002362350920000068
队列中1的个数;
计算信息源的参数冗余度:
Figure RE-GDA0002362350920000069
式中,各符号含义同上。
有益效果:本发明提出了一种基于多线程定时器读取CAN数据方法及系统,将数据处理和界面快速刷新事件开辟了多线程定时器处理。与界面UI触发事件相隔离,哈希表一次性刷新界面,从而大大降低了主线程处理数据和刷新界面带来的系统开销,解决了现有技术中处理海量数据处理过程页面卡顿问题。运用多线程技术、内存管理技术、集合化数据处理技术、对象管理模式,降低对大量数据分析的系统开销以及节约内存空间,保障系统流畅度。
附图说明
图1是背景技术传统软件架构示意图。
图2是本发明的系统构架图。
图3是本发明中时间轮改进算法的示意图。
具体实施方式
申请人认为,对于海量数据且时间要求比较高的情况,现有技术中常见的是窗口定时器数据处理方案,这种处理方案按照定时器时间触发后读取CAN缓存区数据,并进行解析和显示。此方案无法分层管理,解析规则变化或者界面变动时,调整难度较大。数据解析和界面刷新在同一线程内,系统开销大,浪费内存定时器和UI更新处于同一线程,每次进入定时器界面卡顿。
为此,本发明提出了一种基于多线程定时器读取CAN数据方法,实现步骤如下:
(1)实现数据缓存功能,运用Marshal.AllocHGlobal在内存中开辟不固定内存空间,数据类型自定义的CAN数据帧类型。实现缓存数据快速缓存。
(2)内存数据不定长,运用IntPtr指针按照内存地址以此把数据存储在列表中,为数据解析做好基础准备。
(3)数据解析按照指定规则,进行数据的重组和分析,数据存储在预先设定的哈希表内,哈希表根据关键码值而直接进行数据访问,也就是说通过关键码值映射到表中一个位置访问数据,加快数据查找速度。
下面通过实施例,并结合相应附图,对本发明的技术方案做进一步说明。
首先创建CAN数据对象,设计CAN数据属性、CAN方法,在构造函数中引用多线程高精度定时器,设置定时器时间、指定委托事件和运行状态;
开启定时器,指定定时时常和超时回调函数,将不同时常的定时器散列在时间轮的对应槽中,每个槽中的定时器以双向链式存储,在运行到某个槽时,遍历链表一次,检查是否有到达时间的计时器,如检测到到达时间的定时器则删除结点;
根据定时器的参数生成TimerNode节点,当定时器的时长大于N个时间片长度,则将该定时器节点添加至第P号轮组,并计算该定时器位于该轮组的第0级至第3级时间轮上的位置:
P[0]=t_exp%R0
Figure RE-GDA0002362350920000071
Figure RE-GDA0002362350920000072
Figure RE-GDA0002362350920000073
其中,
Figure RE-GDA0002362350920000074
式中,T_NOW表示定时器当前所在时刻,T_START表示定时器管理算法开始的时刻,T_SLOT表示定时器的时隙即时间片长度,P[0]表示第0级时间轮上的第0号槽,P[1] 表示第1级时间轮上的第1号槽,P[2]表示第2级时间轮上的第2号槽,P[3]表示第3 级时间轮上的第3号槽,interval表示定时器的定时时长,R0、R1、R2、R3分别表示第0级、第1级、第2级、第3级的槽数;
引入基于高速缓存的时间轮改进算法,由一个主线程和N个子线程协同完成,主线程在时间轮上以顺时针每隔一个T_SLOT时间访问一个槽,每访问一个槽执行一次 perTick操作,时间轮的第j个槽的访问结束后通知第j号子线程,第j号子线程收到通知后在第j组轮组中查找T_SLOT*N时间内超时的定时器,并将查找结果添加至时间轮的第j号槽中;对于上下文树中的每个节点,利用存储与节点内部的数据计算出估计概率:
Figure RE-GDA0002362350920000081
式中,
Figure RE-GDA0002362350920000082
由无记忆信息源产生,a表示
Figure RE-GDA0002362350920000083
队列中0的个数,b表示
Figure RE-GDA0002362350920000084
队列中1的个数;
采用ZR估算法降低信息源的参数冗余度:
Figure RE-GDA0002362350920000085
式中,各符号含义同上;
计算信息源的参数冗余度:
Figure RE-GDA0002362350920000086
式中,各符号含义同上。
随后,定时时间到达后关闭定时器执行委托事件,获取CAN接收数据缓存区的数据长度;在非托管模式下,在内存中开辟与缓存区的数据相等的空间;使用指针把缓存区的数据复制到内存中并清空CAN缓存区;把内存中数据插入链表中并释放内存;获取列表中对应数据类型帧数,按照数据帧数循环读取每帧数据,按照通讯规则解析每个数据对应一个哈希值,存在哈希表内。
接着,在主窗体中声明委托方法实现多线程下操作控件;主窗体下引用多线程高精度定时器;设置定时器时间、运行状态;使用.NET框架在异步线程下完成一次异步调用,.NET框架将异步请求队列加入线程池,以线程池内的线程处理异步请求,当所有的线程都处于忙碌状态,则使用新的异步调用置于等待队列,直到线程池产生新的可用线程。
最后,主窗体定时器到达后关闭定时器,调用委托方法,在委托方法中判断哈希表元素个数是否满足要求。利用反射技术批量获取控件,哈希表的值对应传递给控件;刷新完成后开启定时器;构件演化系统基于XML文件建立构件演化策略解析,由系统的演化模块读取XML配置文件的内容,由演化策略解析模块首先定位到Evolution节点,判断改节点的子节点列表是否为空;若子节点的列表为空,则由构件演化系统依次获取 element节点,得到需要演化的构件名,并得到需要改变底层实现function节点的内容;由系统的构件演化模块进行构件的动态更新,从而完成演化策略解析的过程。
本发明所述的一种多线程定时器读取CAN数据方法,解决了数据收集处理过程中系统开销大、页面卡顿技术问题。本发明运用多线程技术、内存管理技术、集合化数据处理技术、对象管理模式,降低对大量数据分析的系统开销以及节约内存空间,保障系统流畅度。
如上所述,尽管参照特定的优选实施例已经表示和表述了本发明,但其不得解释为对本发明自身的限制。在不脱离所附权利要求定义的本发明的精神和范围前提下,可对其在形式上和细节上做出各种变化。

Claims (10)

1.一种基于多线程定时器读取CAN数据方法,其特征是包括以下步骤:
步骤1、创建CAN数据对象,设计CAN数据属性、CAN方法,在构造函数中引用多线程高精度定时器,设置定时器时间、指定委托事件和运行状态;
步骤2、定时时间到达后关闭定时器执行委托事件,获取CAN接收数据缓存区的数据长度;
步骤3、在主窗体中声明委托方法实现多线程下操作控件;
步骤4、主窗体定时器到达后关闭定时器,调用委托方法,在委托方法中判断哈希表元素个数是否满足要求。
2.根据权利要求1所述的一种基于多线程定时器读取CAN数据方法,其特征在于,所述步骤1进一步包括:
步骤1-1、开启定时器,指定定时时常和超时回调函数,将不同时常的定时器散列在时间轮的对应槽中,每个槽中的定时器以双向链式存储,在运行到某个槽时,遍历链表一次,检查是否有到达时间的计时器,如检测到到达时间的定时器则删除结点;
步骤1-2、根据定时器的参数生成TimerNode节点,当定时器的时长大于N个时间片长度,则将该定时器节点添加至第P号轮组,并计算该定时器位于该轮组的第0级至第3级时间轮上的位置:
P[0]=t_exp%R0
Figure DEST_PATH_FDA0002362350910000011
Figure DEST_PATH_FDA0002362350910000012
Figure DEST_PATH_FDA0002362350910000013
其中,
Figure DEST_PATH_FDA0002362350910000014
式中,T_NOW表示定时器当前所在时刻,T_START表示定时器管理算法开始的时刻,T_SLOT表示定时器的时隙即时间片长度,P[0]表示第0级时间轮上的第0号槽,P[1]表示第1级时间轮上的第1号槽,P[2]表示第2级时间轮上的第2号槽,P[3]表示第3级时间轮上的第3号槽,interval表示定时器的定时时长,R0、R1、R2、R3分别表示第0级、第1级、第2级、第3级的槽数;
其中,;
步骤1-3、引入基于高速缓存的时间轮改进算法,由一个主线程和N个子线程协同完成,主线程在时间轮上以顺时针每隔一个
Figure 686077DEST_PATH_IMAGE016
时间访问一个槽,每访问一个槽执行一次perTick操作,时间轮的第j个槽的访问结束后通知第j号子线程,第j号子线程收到通知后在第j组轮组中查找
Figure DEST_PATH_IMAGE030
时间内超时的定时器,并将查找结果添加至时间轮的第j号槽中。
3.根据权利要求2所述的一种基于多线程定时器读取CAN数据方法,其特征在于,所述步骤1-3进一步包括:
步骤1-3a、对于上下文树中的每个节点,利用存储与节点内部的数据计算出估计概率:
Figure DEST_PATH_FDA0002362350910000021
式中,
Figure DEST_PATH_IMAGE034
由无记忆信息源产生,
Figure DEST_PATH_IMAGE036
表示
Figure 353950DEST_PATH_IMAGE034
队列中0的个数,
Figure DEST_PATH_IMAGE038
表示
Figure 71370DEST_PATH_IMAGE034
队列中1的个数;
步骤1-3b、采用ZR估算法降低信息源的参数冗余度:
Figure DEST_PATH_FDA0002362350910000025
式中,各符号含义同上;
步骤1-3c、计算信息源的参数冗余度:
Figure DEST_PATH_FDA0002362350910000026
式中,各符号含义同上。
4.根据权利要求2所述的一种基于多线程定时器读取CAN数据方法,其特征在于,所述步骤2进一步包括:
在非托管模式下,在内存中开辟与缓存区的数据相等的空间;使用指针把缓存区的数据复制到内存中并清空CAN缓存区;把内存中数据插入链表中并释放内存;获取列表中对应数据类型帧数,按照数据帧数循环读取每帧数据,按照通讯规则解析每个数据对应一个哈希值,存在哈希表内。
5.根据权利要求1所述的一种基于多线程定时器读取CAN数据方法,其特征在于,所述步骤3进一步包括:
主窗体下引用多线程高精度定时器;设置定时器时间、运行状态;使用.NET框架在异步线程下完成一次异步调用,.NET框架将异步请求队列加入线程池,以线程池内的线程处理异步请求,当所有的线程都处于忙碌状态,则使用新的异步调用置于等待队列,直到线程池产生新的可用线程。
6.根据权利要求1所述的一种基于多线程定时器读取CAN数据方法,其特征在于,所述步骤4进一步包括:
步骤4-1、利用反射技术批量获取控件,哈希表的值对应传递给控件;刷新完成后开启定时器;
步骤4-2、构件演化系统基于XML文件建立构件演化策略解析,由系统的演化模块读取XML配置文件的内容,由演化策略解析模块首先定位到Evolution节点,判断改节点的子节点列表是否为空;
步骤4-3、若子节点的列表为空,则由构件演化系统依次获取element节点,得到需要演化的构件名,并得到需要改变底层实现function节点的内容;
步骤4-4、由系统的构件演化模块进行构件的动态更新,从而完成演化策略解析的过程。
7.一种基于多线程定时器读取CAN数据方法,其特征是包括以下模块:
用于创建CAN数据对象的第一模块;
用于获取CAN接收数据缓存区的数据长度的第二模块;
用于在主窗体中声明委托方法实现多线程下操作控件的第三模块;
用于在委托方法中判断哈希表元素个数是否满足要求的第四模块。
8.根据权利要求6所述的一种基于多线程定时器读取CAN数据方法,其特征在于:
所述第一模块进一步用于设计CAN数据属性、CAN方法,在构造函数中引用多线程高精度定时器,设置定时器时间、指定委托事件和运行状态:
所述第二模块进一步用于在非托管模式下,在内存中开辟与缓存区的数据相等的空间;使用指针把缓存区的数据复制到内存中并清空CAN缓存区;把内存中数据插入链表中并释放内存;获取列表中对应数据类型帧数,按照数据帧数循环读取每帧数据,按照通讯规则解析每个数据对应一个哈希值,存在哈希表内;
所述第三模块进一步用于在主窗体下引用多线程高精度定时器;设置定时器时间、运行状态;使用.NET框架在异步线程下完成一次异步调用,.NET框架将异步请求队列加入线程池,以线程池内的线程处理异步请求,当所有的线程都处于忙碌状态,则使用新的异步调用置于等待队列,直到线程池产生新的可用线程;
所述第四模块进一步用于利用反射技术批量获取控件,哈希表的值对应传递给控件;刷新完成后开启定时器;构件演化系统基于XML文件建立构件演化策略解析,由系统的演化模块读取XML配置文件的内容,由演化策略解析模块首先定位到Evolution节点,判断改节点的子节点列表是否为空;若子节点的列表为空,则由构件演化系统依次获取element节点,得到需要演化的构件名,并得到需要改变底层实现function节点的内容;由系统的构件演化模块进行构件的动态更新,从而完成演化策略解析的过程。
9.根据权利要求6所述的一种基于多线程定时器读取CAN数据方法,其特征在于:
所述第一模块进一步用于开启定时器,指定定时时常和超时回调函数,将不同时常的定时器散列在时间轮的对应槽中,每个槽中的定时器以双向链式存储,在运行到某个槽时,遍历链表一次,检查是否有到达时间的计时器,如检测到到达时间的定时器则删除结点;
根据定时器的参数生成TimerNode节点,当定时器的时长大于N个时间片长度,则将该定时器节点添加至第P号轮组,并计算该定时器位于该轮组的第0级至第3级时间轮上的位置:
P[0]=t_exp%R0
Figure DEST_PATH_FDA0002362350910000041
Figure DEST_PATH_FDA0002362350910000042
Figure DEST_PATH_FDA0002362350910000043
其中,
Figure DEST_PATH_FDA0002362350910000044
其中,;
式中,
Figure 779487DEST_PATH_IMAGE012
表示定时器当前所在时刻,
Figure 601950DEST_PATH_IMAGE014
表示定时器管理算法开始的时刻,
Figure 809596DEST_PATH_IMAGE016
表示定时器的时隙即时间片长度,
Figure 8496DEST_PATH_IMAGE018
表示第0级时间轮上的第0号槽,
Figure 677375DEST_PATH_IMAGE020
表示第1级时间轮上的第1号槽,
Figure 608421DEST_PATH_IMAGE022
表示第2级时间轮上的第2号槽,
Figure 362751DEST_PATH_IMAGE024
表示第3级时间轮上的第3号槽,
Figure 99763DEST_PATH_IMAGE026
表示定时器的定时时长,
Figure 560831DEST_PATH_IMAGE028
分别表示第0级、第1级、第2级、第3级的槽数;
引入基于高速缓存的时间轮改进算法,由一个主线程和N个子线程协同完成,主线程在时间轮上以顺时针每隔一个
Figure 990675DEST_PATH_IMAGE016
时间访问一个槽,每访问一个槽执行一次perTick操作,时间轮的第j个槽的访问结束后通知第j号子线程,第j号子线程收到通知后在第j组轮组中查找
Figure 169984DEST_PATH_IMAGE030
时间内超时的定时器,并将查找结果添加至时间轮的第j号槽中。
10.根据权利要求8所述的一种基于多线程定时器读取CAN数据方法,其特征在于:
所述第一模块进一步用于对于上下文树中的每个节点,利用存储与节点内部的数据计算出估计概率:
Figure DEST_PATH_FDA0002362350910000051
式中,
Figure 382791DEST_PATH_IMAGE034
由无记忆信息源产生,
Figure 26262DEST_PATH_IMAGE036
表示
Figure 299111DEST_PATH_IMAGE034
队列中0的个数,
Figure 28033DEST_PATH_IMAGE038
表示
Figure 44530DEST_PATH_IMAGE034
队列中1的个数;
采用ZR估算法降低信息源的参数冗余度:
Figure DEST_PATH_FDA0002362350910000055
式中,
Figure 480191DEST_PATH_IMAGE034
由无记忆信息源产生,
Figure 186591DEST_PATH_IMAGE036
表示
Figure 137230DEST_PATH_IMAGE034
队列中0的个数,
Figure 19735DEST_PATH_IMAGE038
表示
Figure 309902DEST_PATH_IMAGE034
队列中1的个数;
计算信息源的参数冗余度:
Figure DEST_PATH_FDA0002362350910000059
式中,各符号含义同上。
CN201911149285.4A 2019-11-21 2019-11-21 一种基于多线程定时器读取can数据方法及系统 Withdrawn CN111124621A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911149285.4A CN111124621A (zh) 2019-11-21 2019-11-21 一种基于多线程定时器读取can数据方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911149285.4A CN111124621A (zh) 2019-11-21 2019-11-21 一种基于多线程定时器读取can数据方法及系统

Publications (1)

Publication Number Publication Date
CN111124621A true CN111124621A (zh) 2020-05-08

Family

ID=70496147

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911149285.4A Withdrawn CN111124621A (zh) 2019-11-21 2019-11-21 一种基于多线程定时器读取can数据方法及系统

Country Status (1)

Country Link
CN (1) CN111124621A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112099953A (zh) * 2020-09-17 2020-12-18 北京石油化工学院 一种基于耦合动态整数帐篷映射的并行Hash函数构造方法
CN113954104A (zh) * 2021-12-23 2022-01-21 辰星(天津)自动化设备有限公司 并联机器人的多线程控制器
CN114915382A (zh) * 2022-05-16 2022-08-16 南京航空航天大学 一种agv无线通信掉线重传及数据粘包处理方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112099953A (zh) * 2020-09-17 2020-12-18 北京石油化工学院 一种基于耦合动态整数帐篷映射的并行Hash函数构造方法
CN113954104A (zh) * 2021-12-23 2022-01-21 辰星(天津)自动化设备有限公司 并联机器人的多线程控制器
CN113954104B (zh) * 2021-12-23 2022-04-01 辰星(天津)自动化设备有限公司 并联机器人的多线程控制器
CN114915382A (zh) * 2022-05-16 2022-08-16 南京航空航天大学 一种agv无线通信掉线重传及数据粘包处理方法
CN114915382B (zh) * 2022-05-16 2024-03-22 南京航空航天大学 一种agv无线通信掉线重传及数据粘包处理方法

Similar Documents

Publication Publication Date Title
CN111124621A (zh) 一种基于多线程定时器读取can数据方法及系统
US9177027B2 (en) Database management system and method
US8352517B2 (en) Infrastructure for spilling pages to a persistent store
US9563477B2 (en) Performing concurrent rehashing of a hash table for multithreaded applications
US7472228B2 (en) Read-copy update method
US9996594B2 (en) Method, article and system for time dependent search
US9304920B2 (en) System and method for providing cache-aware lightweight producer consumer queues
CN107958018B (zh) 缓存中的数据更新方法、装置及计算机可读介质
JP6708657B2 (ja) トランザクション実行に応じて追跡データを生成する装置及び方法
CN117312394B (zh) 一种数据访问方法、装置、存储介质及电子设备
CN111324427B (zh) 一种基于dsp的任务调度方法及装置
KR20170134723A (ko) 이벤트 처리 시스템 페이징
US20060074875A1 (en) Method and apparatus for predicting relative selectivity of database query conditions using respective cardinalities associated with different subsets of database records
WO2017205782A1 (en) Multitier cache framework
US20090320022A1 (en) File System Object Node Management
US20070088871A1 (en) Implementation of shared and persistent job queues
US8341368B2 (en) Automatic reallocation of structured external storage structures
CN106970998A (zh) 新闻数据的更新方法及装置
EP3057286A1 (en) Method and system for configuring web cache memory and for processing request
EP4002287B1 (en) Intersection testing for ray tracing
JP2018036864A (ja) 電子制御装置、解析システム
JPH02220152A (ja) メモリ割当て優先度の動的変更処理方式
JPH0830562A (ja) マルチプロセッサシステム
CN116126750B (zh) 一种基于硬件特性的数据处理的方法及装置
CN115033820A (zh) 一种基于Vue的响应式共享数据存储方法及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WW01 Invention patent application withdrawn after publication

Application publication date: 20200508

WW01 Invention patent application withdrawn after publication