AIS client的初始化过程

2023-12-30 20:30
文章标签 过程 初始化 client ais

本文主要是介绍AIS client的初始化过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简单来说:

1,ais client app会调用qcarcam_initialize建立与server的连接,通信方式为本地socket通信

2,在建立通信后,会与server交换一部分信息,用于后续建立main connection以及event connection

3,在创建event connection的过程中,还会创建两个重要的线程:ais_client_event_recv_thread,ais_client_event_cb_thread

4,ais_client_event_recv_thread线程负责接收event事件,并且把接收到的时间入列(ais_event_queue_enqueue)

5,ais_client_event_cb_thread会从event队列中取出事件,并调用相应的回调函数进行处理,这里需要注意的是,这里的event队列不确定是否和4中描述的队列是同一个队列.

流程图:

ais_client_alloc

这个函数中会从全局数组变量sgs_ais_client中找到一个空的位置来初始化client,sgs_ais_client数组最大成员为64,也就是ais支持的client个数为64个:

#define AIS_MAX_USR_CONTEXTS 64

static int ais_client_alloc(void)
{int rc = -1;int i;AIS_LOG_CLI_API("E");pthread_mutex_lock(&sgs_mutex);for (i = 0; i < AIS_MAX_USR_CONTEXTS; i++) {    if (sgs_ais_client[i].qcarcam_hndl == NULL){ais_client_init(&sgs_ais_client[i]);sgs_ais_client[i].qcarcam_hndl = AIS_CONTEXT_IN_USE;rc = i; break;}}  

ais_client_exchange

这个函数会通过本地socket通信方式与server建立连接,交换连接信息.

/*** connection information to be exchanged between client/server*/
typedef struct
{int id;                     /**< connection id */int cnt;                    /**< number of connections */unsigned int gid;           /**< group id of client*/unsigned int pid;           /**< process id of client */unsigned int app_version;   /**< QCarCam API version of application */unsigned int version;       /**< QCarCam API version of client lib */CameraResult result;        /**< result of exchange */unsigned int flags;         /**< flags for new connection */
} s_ais_conn_info;

这篇关于AIS client的初始化过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/553908

相关文章

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte