Skip to content

Repository files navigation

MultiThreadIO

基于 Cangjie(仓颉)编程语言 的 HarmonyOS 多线程 I/O 实践示例。

本示例对应华为开发者文档:多线程IO


概述

本应用演示了在 Cangjie 语言中使用 多线程 进行文件读写和数据库操作的完整流程。通过 ArkUI 构建交互界面,让用户直观体验多线程在 I/O 密集型任务和 CPU 密集型任务中的不同表现。

核心目标:

  • 理解 Cangjie 中 Thread 模型的使用方法
  • 掌握 I/O 密集型任务(文件读写、数据库写入)的多线程优化
  • 对比 CPU 密集型任务的多线程表现
  • 实践 ArkUI 与 Cangjie 后端线程的协作

功能特性

IO 密集型任务

  • 写文件:通过子线程将数据写入本地文件,避免阻塞 UI 线程
  • 读文件:通过子线程读取本地文件内容
  • 写数据库:通过子线程向 SQLite 数据库写入数据
  • 实时显示线程执行状态和耗时

CPU 密集型任务

  • 通过子线程执行高计算量操作
  • 对比单线程与多线程的执行效率差异

项目结构

entry/src/main/cangjie/
├── index.cj                  # 主界面 UI(Tabs 切换 IO / CPU 任务)
├── main_ability.cj           # Ability 生命周期管理
├── ability_stage.cj          # Stage 配置
├── constants/
│   └── CommonConstants.cj     # 公共常量定义
├── global/
│   └── Global.cj              # 全局状态管理
└── utils/
    ├── FileUtils.cj           # 文件读写工具类(多线程实现)
    └── DatabaseUtils.cj       # 数据库操作工具类(多线程实现)

关键模块说明

模块 文件 功能
UI 层 index.cj ArkUI 页面,使用 Tabs 组件切换任务类型,展示执行状态和结果
文件 I/O utils/FileUtils.cj 封装 Thread 实现文件异步读写,含进度反馈
数据库 utils/DatabaseUtils.cj 封装 Thread 实现数据库异步写入
常量 constants/CommonConstants.cj 线程数、文件路径、数据库配置等
全局 global/Global.cj 跨页面共享状态(线程状态、执行结果)

核心技术

多线程模型

使用 Cangjie 标准库 std.thread 提供的 Thread 类:

// 示例:异步写入文件
func writeToFile(content: String, filePath: String): Unit {
    let thread = Thread() {
        // 在子线程中执行文件写入
        let file = File(filePath, OpenMode.WRITE)
        file.write(content)
        file.close()
    }
    thread.start()
}

ArkUI 交互

  • 使用 Tabs + TabContent 实现任务类型切换
  • 使用 Button 触发异步任务
  • 使用 TextArea 展示执行结果
  • 使用 LoadingProgress 显示加载状态

数据库操作

使用 HarmonyOS 内置关系型数据库(relationalStore),在子线程中执行插入操作,避免阻塞 UI。


环境要求

  • HarmonyOS SDK 5.0+(API 12+)
  • Cangjie 编译器(请参考 仓颉语言官方指南
  • DevEco Studio NEXT(推荐)

构建与运行

# 使用 DevEco Studio 打开项目根目录
# 选择目标设备(模拟器或真机)
# 点击运行

或通过命令行:

# 确保已配置 HarmonyOS 开发环境
hvigorw assembleHap
hdc install ./entry/build/default/output/default/entry-default.hap

许可证

本项目仅供学习参考,代码基于 HarmonyOS / Cangjie 开源许可协议。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages