OpenHarmony网络协议通信—libevent [GN编译] - 事件通知库

libevent主要是用C语言实现了事件通知的功能

下载安装

直接在OpenHarmony-SIG仓中搜索libevent并下载。

使用说明

以OpenHarmony 3.1 Beta的rk3568版本为例

  1. 库代码存放路径:./third_party/libevent

  2. 修改添加依赖的编译脚本

在/developtools/bytrace_standard/ohos.build文件中添加修改 “//third_party/libevent:libevent_targets”,“//third_party/libevent:libevent_test”

{"subsystem": "developtools","parts": {"bytrace_standard": {"module_list": ["//developtools/bytrace_standard/interfaces/innerkits/native:bytrace_core","//developtools/bytrace_standard/bin:bytrace_target","//developtools/bytrace_standard/bin:bytrace.cfg","//developtools/bytrace_standard/interfaces/kits/js/napi:bytrace","//third_party/libevent:libevent_targets","//third_party/libevent:libevent_test"],"inner_kits": [{"type": "so","name": "//developtools/bytrace_standard/interfaces/innerkits/native:bytrace_core","header": {"header_files": ["bytrace.h"],"header_base": "//developtools/bytrace_standard/interfaces/innerkits/native/include"}}],"test_list": ["//developtools/bytrace_standard/bin/test:unittest"]}}
}
  1. 用命令 ./build.sh --product-name rk3568 --ccache 编译

  2. 生成库文件路径:

    out/rk3568/developtools/profiler(该路径生成库文件)

    out/rk3568/common/common (该路径生成生成可执行测试文件)

接口说明

  1. libevent的一次性初始化 event_init()event_base_new()

  2. 启用通知

声明一个事件结构并调用event_set()来初始化该结构的成员

event_add()将该结构添加到受监控事件列表中,只要事件结构处于活动状态,它就必须保持分配状态。

  1. 循环和分派事件

    event_dispatch()

  2. I/O 缓冲器

    该库在常规事件回调之上提供了一个缓冲事件。提供了自动填充和排出的输入和输出缓冲区。缓冲事件的用户不再直接处理 I/O,而是从输入缓冲区读取并写入输出缓冲区

    bufferevent_new() 初始化

    bufferevent_read() 读取bufferevent结构数据

    bufferevent_write() 往bufferevent结构写入数据

  3. 创建在一定时间到期后调用回调的计时器

    evtimer_set () 准备一个事件结构以用作计时器

    evtimer_add() 激活计时器

    evtimer_del() 停用计时器

  4. 异步DNS解析(使用回调来避免在执行查找时阻塞) evdns_init() 初始化

    evdns_resolve_ipv4() 将主机名转换为 IP 地址

    evdns_resolve_reverse() 执行反向查找

  5. 事件驱动的 HTTP 服务器

    该库提供了一个非常简单的事件驱动 HTTP 服务器,可以嵌入到程序中并用于服务 HTTP 请求

    evhttp_new() 创建服务器

    evhttp_bind_socket() 添加要监听的地址和端口

    evhttp_set_cb() 为每个 URI 分配一个回调

    evhttp_set_gencb() 注册通用回调函数

约束与限制

在下述版本验证通过:

DevEco Studio 版本:3.1 Beta1(3.1.0.200),SDK:API9 Beta5(3.2.10.6)

目录结构

|---- libevent 
|     |---- cmake   #存放cmake文件,配置cmake编译需要的头文件和源文件路径
|     |---- compat   #定义了很多宏定义,主要用于singly-linked list,list,simple queue,tail queue,circle queue等结构体
|     |---- include   #头文件
|     |---- m4   #里面存放m4文件,m4是unix下的一种编程语言,m4文件就是用m4语言写的,通常是因为configure会依赖它
|     |---- sample   #demo
|     |---- test   #单元测试的代码目录
|     |---- event.c   # event主要方法实现数
|     |---- epoll.c   #对epoll的封装
|     |---- select.c   #对select的封装
|     |---- devpull.c   #对dev/poll的封装
|     |---- kqueue.c   #对kueue的封装
|     |---- signal.c    #对信号事件的处理
|     |---- evutil.c   #些辅助功能函数的实现,包含建立socket pair和一些时间操做函数
|     |---- log.c   #log日志实现
|     |---- buffer*.c   #对缓冲区封装
|     |---- http.c   #HTTP 服务器
|     |---- evdns.c   #异步dns查询库

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

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

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

相关文章

C++_类型转换

文章目录 学习目标:1.static_cast2. reinterpret_cast3.const_cast4. dynamic_cast 学习过程1.static_cast2. reinterpret_cast3.const_cast在这里插入图片描述4. dynamic_cast 学习目标: 标准C为了加强类型转换的可视性,引入了四种命名的强…

mysql 查询实战3-解答

对mysql 查询实战3-题目,进行一个解答 11、查询每⽉产品交易与退款情况 目标:查询每⽉产品交易(交易总额,交易数)与退款情况(退款总额,退款数) 1,先把日期格式化 使用 E…

STM32直接存储器存取DMA

前提知识: 1、STM32F103内部存储器结构以及映射 STM32F103的程序存储器、数据存储器、寄存器和IO端口被组织在同一个4GB的线性地址空间内。数据字节以小端模式存放在存储器中。即低地址中存放的是字数据的低字节,高地址中存放的是字数据的高字节 可访问…

用Python在PDF文档中插入单图像水印和平铺图像水印

PDF文档因其跨平台兼容性和内容保真度成为信息交换的标准载体,为应对版权侵犯、内容篡改以及未经授权的传播等风险,向PDF中插入图片水印成为一种强化文档安全性、彰显所有权及实施访问控制的有效手段。图片水印不仅能以直观的方式标示文档来源、强化版权…

Windows:web端UI自动化=python+selenium+pycharm框架

本篇写怎么写一个UI自动化代码。mac和Windows是一样的 都是这样写 不过,习惯用Windows了 如果python没有安装可以看我另一篇安装python的教程 先安装python先 下载完python 下载pip 1 安装pip $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载…

Sentinel + Nacos流控规则持久化配置

json参数对映sentinel 规则面板 [{"controlBehavior": 0,"count": 2,"grade": 1,"limitApp": "default","resource": "flow","strategy": 0} ] 第二步,告诉订单服务读取配置&…

Golang | Leetcode Golang题解之第38题外观数列

题目&#xff1a; 题解&#xff1a; func countAndSay(n int) string {prev : "1"for i : 2; i < n; i {cur : &strings.Builder{}for j, start : 0, 0; j < len(prev); start j {for j < len(prev) && prev[j] prev[start] {j}cur.WriteStr…

Ubuntu的终端中启用鼠标左键即为选中复制,右键粘贴的功能

在Ubuntu终端中启用鼠标复制和粘贴的功能需要进行一些设置。 首先&#xff0c;打开终端窗口&#xff0c;在菜单栏中找到“Edit”选项&#xff0c;点击“Profile Preferences”。然后&#xff0c;在“General”选项卡中&#xff0c;勾选“Use custom font”选项&#xff0c;可以…

Excel中将单元格格式改成文本后,为何要双击数字才会改变?

将大批量的数值型数字转换成文本型数字&#xff0c;当然不能一个一个的去双击做转换了。以下说说有哪个可以将数值型数字转换成文本型数字的方法。 一、转换方法 方法1.数据分列功能 选中数据后&#xff0c;点击数据选项卡&#xff0c;分列&#xff0c; 分列向导的第一步和…

Transformer推理性能优化技术很重要的一个就是K V cache,能否通俗分析,可以结合代码?

原文&#xff1a;Transformer推理性能优化技术很重要的一个就是K V cache&#xff0c;能否通俗分析&#xff0c;可以结合代码? - 知乎 为什么要研究KV cache&#xff1f; 设输入序列的长度为 s &#xff0c;输出序列的长度为 n &#xff0c;模型深度为l&#xff0c;维度为h,以…

设计模式:简单工厂模式(Simple Factory)

设计模式&#xff1a;简单工厂模式&#xff08;Simple Factory&#xff09; 设计模式&#xff1a;简单工厂模式&#xff08;Simple Factory&#xff09;模式动机模式定义模式结构时序图模式实现测试模式分析实例&#xff1a;Qt 控件类优缺点适用环境模式应用 设计模式&#xff…

关基网络战时代,赛宁网安电力网络攻防靶场全面提升电网安全防护力

随着网络空间成为与陆地、海洋、天空、太空同等重要的人类活动新领域&#xff0c;自网络空间向物理电网发起攻击&#xff0c;破坏电力等国家关键基础设施成为当前大国博弈、大规模战争的重要手段和常态进攻形式。同时&#xff0c;新型电力系统建设发展驱动电力系统形态和控制方…

基于Springboot的社区待就业人员信息管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的社区待就业人员信息管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三…

TaskWeaver使用记录

TaskWeaver使用记录 1. 基本介绍2. 总体结构与流程3. 概念细节3.1 Project3.2 Session3.3 Memory3.4 Conversation3.5 Round3.6 Post3.7 Attachment3.8 Plugin3.9 Executor 4. 代码特点5. 使用过程5.1 api调用5.2 本地模型使用5.3 添加插件 6. 存在的问题与使用体验6.1 判别模型…

笔记本电脑坏了硬盘数据会丢失吗 笔记本电脑坏了如何取出硬盘的资料 数据恢复软件

笔记本电脑对我们真的非常重要了&#xff0c;是实现无纸化办公和学习的重要工具&#xff0c;但是如果笔记本电脑坏了我们存储在电脑里的资料该怎么办&#xff1f;笔记本电脑坏了硬盘数据会丢失吗&#xff1f;相信有许多朋友都会有这样的担忧。本文今天就为大家解决笔记本电脑坏…

【银角大王———Django学习DAY0——基础准备】

银角大王——Django学习前情提要 &#xff08;1&#xff09;在pycharm中下载Flask&#xff08;2&#xff09;使用Flask&#xff08;3&#xff09;下载BootStrap框架&#xff08;4&#xff09; 使用BootStrap框架 &#xff08;1&#xff09;在pycharm中下载Flask 在设置——项目…

【若依】代码生成详细教程(单表、主从表、树形表增删改查)

若依代码生成开发接口 修改代码生成配置一、单表实现增删改查1. 新建数据库表结构2. 新建模块&#xff0c;解决项目依赖3. 启动项目&#xff0c;新建菜单4. 导入数据表&#xff0c;自动生成代码5. 将生成代码粘贴到对应的模块&#xff0c;执行生成的sql&#xff08;用于生成菜单…

GitHub/R3D3项目环境配置踩坑记录

1、前言 项目链接地址&#xff1a;SysCV/r3d3 (github.com) 按照安装步骤容易出现的问题&#xff0c;environment.yaml文件中安装相关包&#xff0c;其中还有两个pip install githttps://github.com/..........这两个建议注释掉&#xff0c;后面再来安装这两个。 2、问题及解…

【C++题解】1020. 算算和是多少

问题&#xff1a;1020. 算算和是多少 类型&#xff1a;基本运算、拆位求解 题目描述&#xff1a; 输入一个三位正整数&#xff0c;然后与它倒过来的数相加&#xff0c;输出和。 如&#xff1a;输入167 &#xff0c;则和为167761928。 输入&#xff1a; 只有一行&#xff0c…

全开源小狐狸Ai系统 小狐狸ai付费创作系统 ChatGPT智能机器人2.7.6免授权版

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 测试环境&#xff1a;Linux系统CentOS7.6、宝塔、PHP7.4、MySQL5.6&#xff0c;根目录public&#xff0c;伪静态thinkPHP&#xff0c;开启ssl证书 具有文章改写、广告营销文案、编程…