通过emitter实现worker间线程通讯

通过emitter实现worker间线程通讯

HarmonyOS
2024-05-20 21:28:50
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
coolhead2000

worker中的postmessage只能与宿主线程进行通讯,在某些场景下需要子线程间通讯。引入emitter进行线程间通讯。

核心代码解释

// worker1 emitter.emit 发送'eventId:2'的监听串发送消息 
let eventData: emitter.EventData = { 
  data: { 
    "id": 2, 
    "content": "worker is closing", 
  } 
}; 
emitter.emit("eventId:2", eventData); 
  
// worker2 监听'eventId:2'事件,并发送新的eventId:1的监听事件 
emitter.on('eventId:2', (eventData:emitter.EventData) => { 
  let obj = eventData.data as  Record<string,String> 
  console.info('callback 2, content:' + obj["content"]+', id='+ obj["id"]); 
  emitter.emit('eventId:1', createWorker1) 
});

实现效果

在worker1 close的时候,发送监听事件,worker2收到监听事件后发送新的事件给主线程,主线程收到监听事件后重新new worker1。

分享
微博
QQ
微信
回复
2024-05-21 17:23:47
相关问题
js Fa如何实现线程通信?
4124浏览 • 1回复 待解决
Worker线程内存如何共享
837浏览 • 1回复 待解决
如何创建一个worker线程
358浏览 • 1回复 待解决
Worker和TaskPool的线程数量是否有限制
659浏览 • 1回复 待解决
Worker线程的使用,有谁知道啊?
444浏览 • 1回复 待解决
PageAbility配合多个Slice实现页面切换
12370浏览 • 4回复 已解决
线程执行延时如何实现
442浏览 • 1回复 待解决
关于emitter、eventHub的使用场景
824浏览 • 1回复 待解决
liteos-m怎么实现进程的互斥?
4578浏览 • 1回复 已解决
如何使用taskpool实现线程
475浏览 • 1回复 待解决
如何实现上下切换的页面跳转动画
676浏览 • 0回复 待解决
HarmonyOS物联网串口通讯
9533浏览 • 1回复 待解决
TaskPool与Worker的区别
588浏览 • 1回复 待解决
如何实现线程数据共享
609浏览 • 1回复 待解决
订阅emitter分享,谁有更好的办法?
228浏览 • 1回复 待解决