Name Date Size

..25-Oct-20244 KiB

.gitignoreH A D25-Oct-2024134

AppScope/H25-Oct-20244 KiB

build-profile.json5H A D25-Oct-20241.2 KiB

entry/H25-Oct-20244 KiB

hvigor/H25-Oct-20244 KiB

hvigorfile.tsH A D25-Oct-2024234

hvigorwH A D25-Oct-20241.4 KiB

hvigorw.batH A D25-Oct-20241.5 KiB

oh-package.json5H A D25-Oct-2024282

README_zh.mdH A D25-Oct-20244.7 KiB

screenshots/device/H25-Oct-20244 KiB

README_zh.md

1# Native QoS
2
3### 介绍
4
5本示例中主要介绍开发者如何使用Native QoS的接口来设置、查询以及重置线程的QoS等级,并在界面上显示不同QoS等级的线程完成相同计算任务的时间。功能主要包括点击不同的按钮分别创建高、低QoS等级的线程来完成同样的复杂计算任务;在计算完成后,弹窗显示当前创建线程完成任务执行所花费的时间;同时,可以在日志中查看调用QoS相关接口的结果。
6
7### 效果预览
8
9| 主页                                 | 弹窗显示高等级Qos任务计算时间                                    | 弹窗显示低等级Qos任务计算时间                                            |
10| ------------------------------------ | --------------------------------------------- | --------------------------------------------------- |
11| ![main](screenshots/device/main.jpeg) | ![draw star](screenshots/device/showhighQoScomputingTime.jpeg) | ![change color](screenshots/device/showlowQoScomputingTime.jpeg) |
12
13日志打印
14
15在日志中过滤"QoS"关键字,可以看到和QoS接口调用相关的日志打印,包括设置线程QoS等级的结果、查询线程QoS等级的结果以及重置线程QoS等级的结果。
16
17![log](screenshots/device/QoSLog.png)
18
19#### 使用说明
20
211. 安装编译生成的hap包,并打开应用;
22
232. 点击页面中间的“High level QoS test”按钮或者“Low level QoS test”按钮,页面将弹窗显示使用该QoS等级创建的线程完成计算任务所花费的时间;
24
253. 点击上述按钮后,在日志中过滤“QoS"关键字,可以查看调用QoS接口的时间以及响应的结果;
26
274. 点击弹窗中的“完成”按钮,则可以返回主界面。
28
29### 工程目录
30
31```
32├──entry/src/main
33│  ├──cpp                           // C++代码区
34│  │  ├──CMakeLists.txt             // CMake配置文件
35│  │  ├──main.cpp                   // QoS调用相关逻辑实现
36│  │  └── types
37│  │      └── libentry
38│  │          └── index.d.ts        // native侧暴露给ArkTS侧接口的声明            
39├──ets                              // ets代码区
40│  │──entryability
41│  │  └──EntryAbility.ts            // 程序入口类
42│  └──pages                         // 页面文件
43│  │  └──Index.ets                  // 主界面
44├──resources         	            // 资源文件目录
45```
46
47### 具体实现
48通过在IDE中创建Native C++ 工程,在C++代码中定义对外接口为useHighQos和useLowQos,在js侧调用该接口可在系统中创建对应QoS等级的线程完成任务。
49
50每次调用useHighQos或useLowQos时,会先在系统中启动若干线程模拟系统负载(如果之前已经启动了相关的线程,则不再重复启动);系统负载模拟完成后,会单独启动一个新的、用于完成计算任务的线程,并根据js侧实际调用的接口,调用设置QoS等级的接口为线程设置不同的QoS等级。为了更加清楚地展示不同QoS等级之间的效果区别,本样例中将负载线程以及设置了QoS等级用于完成任务计算的线程都绑到同一个CPU核上。样例运行中,可以通过日志查看线程设置QoS等级的结果,如果设置成功则会查询该线程的QoS等级,并通过日志打印出来,以此判断是否符合预期。
51
52新启动的线程会执行斐波那契数列某项数值的计算;当计算完成后,会重置该线程的QoS等级,然后返回整个计算完成的时间(单位毫秒)到js侧,并通过弹窗显示该时间。
53
54
55源码参考:[cpp目录](entry/src/main/cpp/main.cpp)下的文件。
56
57涉及到的相关接口:
58
59| 接口名 | 描述 |
60| -------- | -------- |
61| OH_QoS_SetThreadQoS(QoS_Level level) | 设置当前任务的QoS等级 |
62| OH_QoS_ResetThreadQoS() | 取消当前任务设置的QoS等级 |
63| OH_QoS_GetThreadQoS(QoS_Level *level) | 获取当前任务的QoS等级 |
64
65
66详细的接口说明请参考[NativeQoS](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/napi/qos-guidelines.md)。
67
68### 相关权限
69
70不涉及。
71
72### 依赖
73
74不涉及。
75
76### 约束与限制
77
781. 本示例仅支持标准系统上运行;
79
802. 本示例已适配API version 12版本SDK,SDK版本号(API Version 12 Release),镜像版本号(5.0 Release);
81
823. 本示例需要使用DevEco Studio 版本号(4.0 Release)及以上版本才可编译运行。
83
84### 下载
85
86如需单独下载本工程,执行如下命令:
87
88```
89git init
90git config core.sparsecheckout true
91echo code/BasicFeature/Native/NdkQoS/ > .git/info/sparse-checkout
92git remote add origin https://gitee.com/openharmony/applications_app_samples.git
93git pull origin master
94```
95
96