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

AutoSar AP中Proxy Class中Methods描述的总结

☞ 返回总目录

5.3.6 Methods(方法)

Proxy Class 与方法包装类

  • 代理类与方法成员:对于远程服务的每种方法,Proxy Class 包含特定于该方法的包装类成员。例如示例中有 Calibrate、Adjust 和 LogCurrentState 三种方法对应的成员。代理类的方法类在特定命名空间 methods 中生成,而 methods 包含在代理命名空间内,代理中的方法成员用于调用远程服务实例提供的方法。

  • 方法包装类的构成:以 Adjust 方法为例,其包装类不复杂,由两部分组成。

    • 内部结构定义:如 Adjust 方法中的 Output 结构体,用于汇总方法的输出(OUT)/ 输入输出(INOUT)参数。
    • 括号运算符重载:用于调用服务方法,它将服务方法的所有输入(IN)/ 输入输出(INOUT)参数作为输入(IN)参数包含在内,并且在 ara::com API 中会把抽象服务方法描述中的 INOUT 参数拆分为一对 IN 和 OUT 参数。
  • 非单向方法的返回值:对非 “单向方法” 调用的返回值是一个 ara::core::Future,模板参数是汇总方法所有输出(OUT)参数的内部结构类型。

5.3.6.1 One - Way aka Fire - and - Forget Methods(单向方法)

  • 单向方法的特点:ara::com 支持 “单向(one - way)” 或 “发射后不管(fire - and - forget)” 方法。这种方法只有输入(IN)参数,没有输出(OUT)参数,不允许引发错误,无法与服务器进行握手 / 同步,客户端 / 调用者无法得知服务器是否处理了该调用。从资源角度看,这种方法在某些通信模式中是轻量级的。

5.3.6.2 Event - Driven vs Polling access to method results(事件驱动与轮询访问方法结果)

  • API 支持与核心类:与事件数据访问类似,为基于事件驱动和轮询的方法提供了 API 支持来访问服务方法调用结果,核心类是 ara::core::Future,它是 C++11/C++14 std::future 类的扩展版本。

  • 事件驱动机制:在事件驱动中,一旦方法调用结果到达,带有代理实例的应用程序作为方法调用者会被 ara::com 实现(Communication Management implementation)通知。ara::com 实现通过设置等待机制(WaitEvent),在方法结果可用时唤醒机制来通知用户。

  • Future 类的接口

    • 枚举类型 future_status:定义了 ready(共享状态已准备好)和 timeout(在指定超时时间过去之前共享状态未准备好)两种状态。
    • 模板类 Future
      • 构造与赋值:提供了默认构造函数、移动构造函数,禁用了拷贝构造函数和拷贝赋值运算符。
      • 获取值与结果:get () 函数获取类型为 T 的值,GetResult () 函数获取包含值或错误的 Result,两者行为与 std::future 函数类似,但 GetResult () 不会抛出异常。
      • 检查有效性:valid () 函数检查 Future 是否具有共享状态。
      • 等待机制:wait () 函数等待值或错误变为可用;wait_for () 函数等待给定时间段直到值或错误可用;wait_until () 函数等待直到给定时间点直到值或错误可用,后两者会根据情况返回 future_status。
      • 注册可调用对象:then () 函数注册一个可调用对象,当 Future 准备好时调用,其返回类型根据注册函数的返回类型确定。
      • 检查异步操作是否完成:is_ready () 函数返回异步操作是否完成。
  • 使用示例与调用方式

    • 基于异常的同步调用示例:在示例中,通过获取服务句柄,使用服务代理对象的 Calibrate 方法调用得到 Future 对象,然后进行阻塞式的 get () 调用获取结果。
    • 多种获取结果的方式:除了阻塞式的 get () 调用外,还有多种获取结果的方式,如不同变体的 wait () 函数,以及通过 then () 注册回调方法。这些方式都是事件驱动的,方法结果的到达事件会导致用户线程恢复执行或调用用户提供的函数。对于一些实时(RT)应用程序,可能不希望被方法调用返回事件激活,此时可以通过 ara::core::Future::is_ready () 进行轮询查看方法调用是否完成,此调用是非阻塞的。

5.3.6.3 Canceling Method Result(取消方法结果)

  • 取消结果的操作:当不再关心通过()操作符调用服务方法返回的 ara::core::future 的结果时,应明确告知通信管理。可以让 ara::core::Future 超出作用域使析构函数被调用,或者在某些情况下(如将返回的 Future 对象分配给了更大作用域的变量),可以用默认构造的实例覆盖变量中的 Future 对象来达到释放资源、停止方法结果的事件等待机制等目的。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python3GUI--字符串加密方案(附源码)
  • 大数据处理技术:分布式文件系统HDFS
  • Vue2知识点
  • Docker部署镜像 发布容器 容器网络互联 前端打包
  • Spring Boot项目:多模块还是单模块?架构师的一次深思熟虑!
  • 重修设计模式-结构型-门面模式
  • MySQL 5.7.42升级到MySQL 8.4.2
  • uniapp child.onFieldChange is not a function
  • js 3个事件监听器 EventListeners
  • Android Studio 安装配置教程(Windows最详细版)
  • 镀金引线---
  • 【楚怡杯】职业院校技能大赛 “云计算应用” 赛项样题四
  • 港迪技术IPO上市实施募投项目,带动公司多维度能力综合提升
  • Java 之多线程高级
  • 安卓13系统导航方式分析以及安卓13修改默认方式为手势导航 android13修改导航方式
  • [Vue CLI 3] 配置解析之 css.extract
  • Django 博客开发教程 16 - 统计文章阅读量
  • Mac转Windows的拯救指南
  • nginx 配置多 域名 + 多 https
  • node 版本过低
  • SpringBoot几种定时任务的实现方式
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • spring学习第二天
  • Vue 重置组件到初始状态
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 前端性能优化——回流与重绘
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 十年未变!安全,谁之责?(下)
  • 什么软件可以剪辑音乐?
  • raise 与 raise ... from 的区别
  • ​​​​​​​​​​​​​​Γ函数
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #NOIP 2014# day.2 T2 寻找道路
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (分类)KNN算法- 参数调优
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (七)理解angular中的module和injector,即依赖注入
  • (推荐)叮当——中文语音对话机器人
  • (五)c52学习之旅-静态数码管
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • .mysql secret在哪_MySQL如何使用索引
  • .net 7 上传文件踩坑
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .Net core 6.0 升8.0
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .Net MVC4 上传大文件,并保存表单