【鸿蒙开发示例代码】Native多线程示例

示例代码合集地址:

HarmonyOS示例代码-鸿蒙系统示例代码-华为开发者联盟 (huawei.com)

代码工程地址:
NativeMultiThreads: 本示例以生产者-消费者模型为案例来介绍如何进行Native多线程开发以及线程间通信。Native侧通过调用C++标准库实现生产者-消费者模型,并分别使用了多种线程间通信的方式来进行ArkTS应用侧数据传输,以实现UI界面图片刷新。 (gitee.com)

Native多线程示例

简介

本示例以生产者-消费者模型为案例来介绍如何进行Native多线程开发以及线程间通信。Native侧通过调用C++标准库实现生产者-消费者模型,并分别使用了多种线程间通信的方式来进行ArkTS应用侧数据传输,以实现UI界面图片刷新。界面效果如图所示:

synchronized_operation

工程目录

├──entry/src/main/common                      
│  └──constans
│     └──CommonConstants.ets                  // 常量定义文件
├──entry/src/main/cpp                         // C++ 代码区                   
│  ├──types
│  │  └──libentry                             // C++接口导出
│  │     ├──index.d.ts                        
│  │     └──oh-package.josn5                 
│  ├──CMakeLists.txt                          // CMake配置文件
│  ├──MultiThreads.cpp                        // Native模块注册
│  ├──ProducerConsumer.cpp                    // 业务功能实现
│  └──ProducerConsumer.h                      
├──entry/src/main/ets                         // ets 代码区
│  ├──entryability
│  │  └──EntryAbility.ets       
│  ├──images                                  // 自定义png图片
│  └──pages
│     └──Index.ets                            // 主页界面
└──entry/src/main/resources                   // 应用资源目录

相关概念

  • NAPI: NAPI提供的接口名与三方Node.js一致,目前支持部分接口。

  • NAPI中支持的标准库: 目前支持标准C库、C++库、OpenSL ES、zlib。

  • NAPI接口说明: 包含napi相关函数的用法、参数解释、以及一些应用示例。

  • 生产者-消费者模型: 某个模块负责产生数据,这些数据由另一个模块来负责处理。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。本示例中,Native侧通过C++线程、信号量以及条件变量等关键特性来实现生产者-消费者模型。生产者线程负责从字符串数组中搜索目标文件路径。搜索到后,放入缓冲队列中。消费者线程负责从缓冲队列中取出目标文件路径,并通过线程通信的方式将结果返回给ArkTS应用侧。

  • Native侧子线程与ArkTS主线程通信方式

    • 多线程同步调用

      该方式通过ArkTS方舟引擎将Native侧原生代码计算的结果直接反馈给ArkTS应用侧。此过程中,Native侧原生代码与ArkTS应用侧均运行在ArkTS主线程上。生产者与消费者线程则采用join()的方式来进行同步处理。

    • 多线程callback异步调用

      该方式通过在Native侧原生代码创建异步工作项、依赖libuv线程池以及EventLoop事件循环机制来实现异步调用。其中,work子线程主要用于执行业务逻辑代码,EventLoop事件循环主要用于将work子线程执行的结果反馈给ArkTS主线程。最终,ArkTS方舟引擎通过回调的方式将Native侧运算结果反馈给ArkTS应用侧。

    • 多线程promise异步调用

      该方式与callback异步调用的主体流程一致。区别在于,ArkTS方舟引擎不是通过callback回调的方式将Native侧运输结果反馈给ArkTS应用侧,而是通过延时对象进行结果解析。

    • 多线程napi_threadsafe_function异步调用

      该方式通过在Native侧原生代码创建线程安全函数、在C++子线程中通过调用线程安全函数将ArkTS回调抛给EventLoop事件循环来实现异步调用。线程安全函数与异步工作项的区别在于,线程安全函数可以在C++子线程中随意多次调用,而异步工作项只能被动处理一次ArkTS回调;线程安全函数的C++子线程是由用户自己创建的,而异步工作项中的work子线程是由libuv线程池管理的。具体API可详见于上文《NAPI接口说明》。

相关权限

不涉及

使用说明

  1. 单页面操作,通过不同按钮触发不同的线程通信方式,以获取图片路径,并进行图片刷新。
  2. “错误图片”按钮触发后,会弹出警示弹窗,以说明图片路径错误。

约束与限制

1.本示例仅支持标准系统上运行,支持设备:华为手机。

2.HarmonyOS系统:HarmonyOS NEXT Developer Beta1及以上。

3.DevEco Studio版本:DevEco Studio NEXT Developer Beta1及以上。

4.HarmonyOS SDK版本:HarmonyOS NEXT Developer Beta1 SDK及以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值