Adaptive AUTOSAR CM模块介绍(六)

Event订阅和缓存原理
Event事件并不是proxy定义了就可以使用,需要Event事件的订阅,一旦订阅成功了,有event事件的时候,就会收到订阅的消息。

/*
brief The application expects the CM to subscribe the event.
param maxSampleCount maximum number of samples,which can be held. 
*/void Subscribe(size_t maxSampleCount);

此方法需要一个参数maxSampleCount,它通过通信管理实现的订阅实现,定义了事件的最大值。因此,通过调用此方法,不仅可以告诉通信管理,现在有兴趣接收事件,而且还可以为那些绑定到具有给定最大SampleCount的事件包装器实例的事件设置“本地缓存”。
这个实现是给予一个本地缓存智能指针,Subcribe()是通过异步调用实现的,因此在调用这个事件的时候,如果正在进行调用的话,会发生pending.
查看订阅状态的函数为:

ara::com::SubscriptionState GetSubscriptionState()const

如果此时订阅后立即调用GetSubscriptionState可能会返回kSubscriptionPending的状态。如果成功的话,就会返回kSubscribed。

/**
*\brief Get new data from the Communication Management 
*buffers and provide it in callbacks to the given callable f. 
.... 
*/template<typename F>ara::core::Result<size_t>GetNewSamples(  F&&f,size_t maxNumberOfSamples=std::numeric_limits<size_t>::max());

从服务端发送到订阅proxy实例的数据是通过IPC实现的,例如,内核缓冲区、特殊的IPC实现控制的共享内存区域等。因此,必须采取调用的操作,从这些缓冲区获取/获取这些事件,最终取消序列化,然后以正确的SampleType的形式将它们放入事件包装类实例特定的缓存中。
size_t类型的第二个参数控制事件样本的最大数量,这些样本将从中间件缓冲区中提取/反序列化,然后以函数调用f的形式呈现给应用程序。

在调用GetNewSamples()时,ara::com实现首先检查应用程序持有的事件样本数是否已经超过了它在上次调用Subscribe()时提交的最大数量。如果是,则返回一个ara::core::ErrorCode。否则,ara::com实现检查底层缓冲区是否包含一个新的事件样本,如果是这样的话,将其取消划分到一个样本槽中,然后调用f提供的应用程序,该应用程序具有指向该新事件样本的SamplePtr。重复此处理(检查缓冲区中的其他样本并回调应用程序提供的回调f)一直到新样本没有了,或者达到最大的数量。

以上是AP的事件的内部实现方式,但是从ara::com实现移交给用户层的是SamplePtr,它是一个唯一的指针(非常类似于std::unique_ptr),这个指针指向事件的内存池在IPC缓存中,一般是share memory。

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

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

相关文章

Mybatis Plus入门进阶:特殊符号、动态条件、公共语句、关联查询、多租户插件

前言 Mybatis Plus入门进阶&#xff1a;特殊符号、动态条件、公共语句、关联查询、多租户插件 隐藏问题&#xff1a;批量插入saveBatch 文章目录 前言注意点动态条件xml公共语句关联查询动态表名使用自定义函数主键生成策略saveBatch插件&#xff1a;多租户TenantLineInnerInte…

linux 上安装tomcat ,并将tomcat注册为服务

参考&#xff1a;https://www.cnblogs.com/DevinZhang1990/p/12795565.html 下载一个tomcat服务器&#xff0c;并上传到服务器&#xff0c;解压到一个路径 如路径为: /server/apache-tomcat-8.0.52 即 $Tomcat_HOME /server/apache-tomcat-8.0.52 将tomcat加到linux服务中 2.…

php 中 try catch 不起作用解决,捕获不到异常

错误写法 try{ $i 1/0; }catch(Exception $e) { echo “error”; } 错误写法 最后发现问题在Exception这个类上&#xff01; 需要在前面加上 \ &#xff08;反斜杠&#xff09;才起作用 像这样 try{$i 1/0; }catch(\Exception $e) {echo "error"; }

Java 代码 实现 字符串去掉左边空格 字符串去掉右边空格

Java 代码 实现 字符串去掉左边空格 字符串去掉右边空格 编写工具类 StringUtils 编写工具类 package com.lihaozhe.util.string;/*** 字符串工具类** author 李昊哲* version 1.0* create 2023/10/17*/ public class StringUtils {/*** 去除字符串左边的的空格** param strin…

智能垃圾桶丨悦享便捷生活

垃圾桶是人们日常生活所必不可少的必需品&#xff0c;它让生活中所产生的垃圾有了一个正确的存放地方。随着生产技术的迅速发展&#xff0c;垃圾桶也得以更新换代。由最初的简单式的圆筒式垃圾桶&#xff0c;到现在出现的感应式垃圾桶、智能语音控制垃圾桶&#xff0c;垃圾桶也…

2023年中国自动驾驶卡车市场发展趋势分析:自动驾驶渗透率快速增长[图]

自动驾驶卡车的技术原理是通过电脑算法控制车辆行驶&#xff0c;辅助驾驶员完成任务。其实现方式主要是基于传感器和计算处理技术。自动驾驶卡车可以随时感知周围环境&#xff0c;灵活避障&#xff0c;自适应调整行驶路径&#xff0c;相比之下传统卡车需要驾驶员进行手动操作&a…

【python_学习笔记】

TypeError: ‘numpy._DTypeMeta‘ object is not subscriptable import torch# 创建一个形状为 (3, 4, 5) 的张量 tensor torch.randn(3, 4, 5)# 使用 permute 重新排列维度&#xff0c;例如 (3, 5, 4) permuted_tensor tensor.permute(0, 2, 1)print("Original Tensor…

Switch模拟器-Ryujinx(龙神模拟器)安装教程

Ryujinx是由gdkchan带领团队运用C#语言创建并发布在GitHub平台的Switch开源模拟器. 系 统 要 求 内存8 GB RAM及以上 显卡支持Vulkan、OpenGL版本4.5及以上 64位系统 Windows 10 RS4&#xff08;Redstone 4&#xff0c;版本 1803&#xff09;或更高版本 软 件 教 程 第一…

Puppeteer监听网络请求、爬取网页图片(二)

Puppeteer监听网络请求、爬取网页图片&#xff08;二&#xff09; Puppeteer监听网络请求、爬取网页图片&#xff08;二&#xff09;一、爬取需求二、实现讲解三、效果查看 一、爬取需求 首先打开浏览器&#xff0c;打开指定网站监听网站发出的所有请求&#xff0c;记录请求&a…

前端版本控制工具,常见的Git 和SVN

目录 前言GitGit简介Git的优势Git常用指令常见的Git服务 SVN (Subversion)SVN简介SVN的优势SVN常用指令SVN与Git的区别 &#x1f44d; 点赞&#xff0c;你的认可是我创作的动力&#xff01; ⭐️ 收藏&#xff0c;你的青睐是我努力的方向&#xff01; ✏️ 评论&#xff0c;你…

从Docker初识K8S

什么是Docker&#xff1f; 假设现在有一个服务场景&#xff0c;你是一个程序猿&#xff0c;你编写代码实现一个机器人喝水的功能&#xff0c;然后你需要将这份代码部署到每个机器人身上&#xff0c;你部署的时候需要一个个安装代码所需的依赖包&#xff0c;然后运行测试你的代码…

影响多用户商城系统价格的因素有哪些?

多用户商城系统作为电商行业不可或缺的重要工具&#xff0c;其价格是众多商家关注的焦点。下面就影响多用户商城系统价格的因素有哪些作一些简单的介绍&#xff0c;希望对大家有所帮助(仅供参考)。 一、系统规模和功能 多用户商城系统的价格首先由其规模和功能决定。规模包括用…

Linux | 一篇文章带你深刻理解粘滞位

目录 前言 一、为什么需要粘滞位 二、粘滞位是什么&#xff1f; 三、怎么设置粘滞位 前言 关于粘滞位的学习&#xff0c;首先你得了解Linux下的权限&#xff0c;当然&#xff0c;文章会稍稍带着复习关键知识点&#xff0c;具体关于权限&#xff0c;请移步 Linux权限 一、为…

学习笔记-MongoDB(复制集,分片集集群搭建)

复制集群搭建 基本介绍 什么是复制集&#xff1f; 复制集是由一组拥有相同数据集的MongoDB实例做组成的集群。 复制集是一个集群&#xff0c;它是2台及2台以上的服务器组成&#xff0c;以及复制集成员包括Primary主节点&#xff0c;Secondary从节点和投票节点。 复制集提供了…

【C++】手撕STL系列——stack,queue篇

前言 前面实现了string和vector&#xff0c;理所应当就该轮到stack和queue啦&#xff0c;本篇还会涉及到一个比较重要且听起来很厉害的概念——适配器模式 适配器模式 在之前数据结构初阶的学习过程中&#xff0c;我们学习的栈是由数组加上一些限制组成的容器&#xff0c;底…

Jenkins 内存占用

查看内存占用 # ps aux | grep 9090 root 130854 0.0 0.0 8900 708 pts/1 S 16:23 0:00 grep --colorauto 9090 root 4010748 0.2 30.7 5826500 2502884 ? Ssl Oct13 8:55 /usr/bin/java -Djava.awt.headlesstrue -jar /usr/share/java/jenkins…

C++入门之引用与内联函数

一、引用 1、初步理解 引用在语法上的理解就是起别名&#xff0c;用法就是在类型后面加&&#xff0c;例子&#xff1a;int a 1; int& b a; 上例所示&#xff0c;执行后&#xff0c;b就是a的别名&#xff0c;它们代表同一块空间&#xff0c;a的改变会影响b&#xff0…

哇喔,用这个平台制作电子画册,太简单了!

经常在朋友圈里看到可以在线浏览、类似仿真书的电子画册&#xff0c;总觉得这种制作起来很难&#xff0c;后来无意间看到朋友在制作&#xff0c;今天终于知道怎么做了&#xff01; 原来只用一个平台 FLBOOK&#xff01;&#xff01;就能做出来这种效果&#xff0c;像我这种电脑…

在vscode中配置git bash终端、git 源码管理

打开vscode文件->首选项->设置&#xff0c;打开设置搜索shell windows将以下配置添加到vscode中的settings.json中 注意&#xff1a; terminal.integrated.profiles.windows这个配置项是就是添加终端的terminal.integrated.defaultProfile.windows这个是配置默认选项的…

【计算机网络笔记】分组交换中的报文交付时间计算例题

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 系列文章目录题目解答 题目 在下图所示的采用“存储-转发”方式的分组交换网络中所有链路的数据传输速率为100 Mbps&#xff0c;分…