HarmonyOS鸿蒙Next中实现不同线程间通信功能示例代码

HarmonyOS鸿蒙Next中实现不同线程间通信功能示例代码

介绍

本示例使用’@ohos.events.emitter’模块,实现了在同一进程不同线程间通信的能力,包括单次订阅事件、取消订阅事件,以及发送信息能力。

实现不同线程间通信功能源码链接

效果预览

图片名称

使用说明

  1. 启动应用后输入框内输入要发送的信息;
  2. 点击’Send Message to B’按钮发送,下方会更新输入框内容;
  3. 点击’Unsub’按钮取消订阅,再次发送信息接收不到。

实现思路

  1. emitterSub(eventId: number, eventCallback: Callback<emitter.EventData>) 这个函数用于订阅一个特定的事件。当该事件被触发时,会调用传入的回调函数。
  2. emitterSend(eventId: number, eventParam: string)这个函数用于发送一个特定的事件,并附带一些数据。
  3. emitterShut(eventId: number)这个函数用于取消对某个事件的订阅。
export function emitterSub(eventId: number, eventCallback: Callback<emitter.EventData>) {
    let event: emitter.InnerEvent = {
        eventId: eventId
    }
    emitter.on(event, eventCallback)
}

export function emitterSend(eventId: number, eventParam: string) {
    let event: emitter.InnerEvent = {
        eventId: eventId
    }
    let eventData: emitter.EventData = {
        data: {
            param: eventParam
        }
    };
    emitter.emit(event, eventData)
}

export function emitterShut(eventId: number) {
    emitter.off(eventId)
}

更多关于HarmonyOS鸿蒙Next中实现不同线程间通信功能示例代码的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS Next中实现线程间通信可以使用EventHub或Emitter。以下是EventHub示例代码:

// 主线程发布事件
import common from '@ohos.app.ability.common';

let eventHub = new common.EventHub();
eventHub.emit("myEvent", {data: "test"});

// 子线程订阅事件
import worker from '@ohos.worker';
import common from '@ohos.app.ability.common';

let workerPort = worker.workerPort;
let eventHub = new common.EventHub(workerPort);
eventHub.on("myEvent", (data) => {
  console.log("Received:" + data);
});

使用Emitter的异步通信示例:

import emitter from '@ohos.events.emitter';

// 发送事件
let event = {
  eventId: 1,
  data: {"key":"value"}
};
emitter.emit(event);

// 接收事件
emitter.on(event => {
  console.log("Event received:" + JSON.stringify(event));
});

更多关于HarmonyOS鸿蒙Next中实现不同线程间通信功能示例代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个很好的HarmonyOS Next线程间通信实现示例。我来分析下这个代码的关键点:

  1. 核心使用了@ohos.events.emitter模块提供的发布-订阅模式,这是HarmonyOS推荐的线程通信方式之一。

  2. 代码封装了三个关键函数:

  • emitterSub()用于订阅事件,通过emitter.on()注册回调
  • emitterSend()用于发送事件,通过emitter.emit()触发事件
  • emitterShut()用于取消订阅,通过emitter.off()移除监听
  1. 事件数据通过EventData结构体传递,支持复杂数据类型。

  2. 示例中通过eventId来区分不同事件,这是典型的发布订阅模式实现。

这种实现方式相比直接使用线程同步原语(如锁)更安全高效,适合HarmonyOS的分布式场景。需要注意事件ID的管理和内存泄漏问题(及时取消订阅)。

回到顶部