HarmonyOS 鸿蒙Next 线程通信 事件循环

发布于 1周前 作者 caililin 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 线程通信 事件循环

export class Tester {
  public u: string = '';

  public startTester() {
    emitter.once("new_model", (eventData) => {
      this.u = eventData.data!.new_model.mode;
      Logger.d(TAG, "监听:" + eventData.data!.new_model.mode);
    });
    let task: taskpool.Task = new taskpool.Task(startDetectRP2PWithSessionModel, info);
    taskpool.execute(task) ....... ....... .......
    Logger.d(TAG, "结束");
  }

  @Concurrent function

  startDetectRP2PWithSessionModel(model: SessionModel) {
    emitter.emit("new_model", { data: { "new_model": new_model } });
  }

打印结果: 结束 监听:RP2P  对JS 异步编程不是很了解 想请问的是emitter.once这种事件监听为什么没有立刻触发?而怎么会是被扔到event loop的队尾执行? 想要的是 监听:RP2P 结束  有办法实现吗?


更多关于HarmonyOS 鸿蒙Next 线程通信 事件循环的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
发送事件可以用,【emit(eventId: string, options: Options, data?: EventData): void 发送指定优先级事件】找个接口,文档如下:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-emitter-V13#emitteremit
优先级枚举里面有IMMEDIATE,表示事件被立即投递。

更多关于HarmonyOS 鸿蒙Next 线程通信 事件循环的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS 鸿蒙Next 线程通信与事件循环主要通过以下机制实现:

线程通信

在HarmonyOS鸿蒙Next中,线程间通信主要通过消息队列(Message Queue)和任务队列(Task Queue)实现。开发者可以创建消息或任务,并将其发送到指定的队列中,目标线程从队列中获取消息或任务进行处理。这种机制确保了线程间的数据传递和同步,避免了直接访问共享资源带来的竞态条件。

事件循环

事件循环是HarmonyOS鸿蒙Next处理异步事件的核心机制。每个线程可以拥有一个事件循环,该循环不断监听并分发来自不同源的事件(如用户输入、网络响应等)。事件循环通过事件分发器(Event Dispatcher)接收事件,然后根据事件的类型和优先级,将其传递给相应的处理函数。处理函数执行完成后,事件循环继续监听下一个事件。这种机制使得HarmonyOS鸿蒙Next能够高效地处理大量并发异步事件。

需要注意的是,事件循环和线程通信机制在HarmonyOS鸿蒙Next中是紧密集成的,共同确保了系统的响应性和稳定性。开发者在设计应用时,应合理利用这些机制,以实现高效的线程间通信和异步事件处理。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部