• Home
Name Date Size #Lines LOC

..--

AppScope/22-Oct-2025-3532

entry/22-Oct-2025-930797

hvigor/22-Oct-2025-3836

screenshots/22-Oct-2025-

.gitignoreD22-Oct-2025133 1212

README_zh.mdD22-Oct-20253.8 KiB7854

build-profile.json5D22-Oct-20251.5 KiB5655

code-linter.json5D22-Oct-2025958 3534

hvigorfile.tsD22-Oct-2025843 225

oh-package.json5D22-Oct-2025834 2624

ohosTest.mdD22-Oct-2025840 66

README_zh.md

1# 基于NdkNativeFence的接口调用示例
2
3### 介绍
4
5本示例主要演示如何在 OpenHarmony 系统中,使用 Native C++ 代码,通过 `OH_NativeFence_IsValid`、`OH_NativeFence_Wait` 、`OH_NativeFence_WaitForever`和 `OH_NativeFence_Close` API,实现接口功能调用。示例展示了如何对fenceFd进行 `OH_NativeFence_Wait`和`OH_NativeFence_WaitForever`操作。
6
7## 效果预览
8
9|      主页面                     |
10| <img src="screenshots/SyncFence.jpeg" width="270" />  |
11
12### 使用说明
13
141. **编译安装**:使用 DevEco Studio 编译生成应用的 hap 包,并将其安装到设备上。
15
162. **运行应用**:打开应用后,您将看到屏幕上显示SyncFenceWait和SyncFenceWaitForever按钮。
17
183. **测试功能**:点击SyncFenceWait按钮,查找“SyncFenceWait”关键字,观察日志输出;然后点击SyncFenceWaitForever按钮,查找“SyncFenceWaitForever”关键字,再次观察日志输出。
19
20### 工程目录
21```
22├──entry/src/main
23│  ├──cpp                           // C++代码区
24│  │  ├──CMakeLists.txt             // CMake配置文件
25│  │  ├──napi_init.cpp              // Napi模块注册
26│  │  ├──common
27│  │  │  └──log_common.h            // 日志封装定义文件
28│  ├──ets                           // ets代码区
29│  │  ├──entryability
30│  │  │  ├──EntryAbility.ts         // 程序入口类
31|  |  |  └──EntryAbility.ets
32│  │  └──pages                      // 页面文件
33│  │     └──Index.ets               // 主界面
34|  ├──resources                     // 资源文件目录
35```
36### 具体实现
37
38本示例通过在 DevEco Studio 中创建 Native C++ 工程,通过 `OH_NativeFence_IsValid`、`OH_NativeFence_Wait` 、`OH_NativeFence_WaitForever`和 `OH_NativeFence_Close` API,实现接口功能调用。
39
40主要步骤如下:
41
421. **调用SyncFenceWait接口**:(1)在接口SyncFenceWait中,调用OH_NativeFence_Wait接口,传入非法fenceFd。(2)利用signalfd函数创建信号,在waitThread线程中调用OH_NativeFence_Wait接口阻塞fenceFd。(3)3s后在主线程中使用kill函数模拟信号触发。(4)观察OH_NativeFence_Wait接口是否解除阻塞。
43
441. **调用SyncFenceWaitForever接口**:(1)在接口SyncFenceWaitForever中,调用OH_NativeFence_WaitForever接口,传入非法fenceFd。(2)利用signalfd函数创建信号,在waitThread线程中调用OH_NativeFence_WaitForever接口阻塞fenceFd。(3)2s后在主线程中使用kill函数模拟信号触发。(4)观察OH_NativeFence_WaitForever接口是否解除阻塞。
45
46| 接口名 | 描述 |
47| -------- | -------- |
48| `OH_NativeFence_IsValid(int fenceFd)` | 检查fenceFd是否有效。 |
49| `OH_NativeFence_Wait(int fenceFd, uint32_t timeout)` |阻塞传入的fenceFd。最大阻塞时间由超时参数决定。 |
50| `OH_NativeFence_WaitForever(int fenceFd)` | 永久阻塞传入的fenceFd。 |
51| `OH_NativeFence_Close(int fenceFd)` | 关闭fenceFd。如果传入的是无效的fenceFd,则该函数会直接返回。 |
52
53### 相关权限
54
55本示例不涉及特殊权限。
56
57### 依赖
58本示例不涉及特殊依赖。
59
60### 约束与限制
61
621. **运行环境**:本示例仅支持标准系统上运行,支持设备:RK3568。
63
642. **SDK 版本**:本示例已适配 API Version 20 版本 SDK,适用于 SDK 版本号(API Version 20 Release)、镜像版本号(5.0.0 Release)。
65
663. **开发工具**:本示例需要使用 DevEco Studio 版本号(5.0.0 Release)及以上版本进行编译和运行。
67
68### 下载
69
70如需单独下载本工程,执行如下命令:
71
72```bash
73git init
74git config core.sparsecheckout true
75echo code/BasicFeature/Native/NdkNativeFence > .git/info/sparse-checkout
76git remote add origin https://gitee.com/openharmony/applications_app_samples.git
77git pull origin master
78```