相关问题
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现Worker对宿主线程接口的同步调用?
51浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙API 13中如何让Task在执行过程中通知宿主线程?
66浏览 • 1回复 待解决
宿主线程如何向worker子线程发送消息?
347浏览 • 1回复 待解决
Worker的宿主线程必须是主线程吗?
404浏览 • 1回复 待解决
HarmonyOS在ArkTS运行环境中,只能像v8环境里的js那样在主线程执行ArkTS代码吗?
414浏览 • 1回复 待解决
宿主线程如何接收子线程发送的消息?
393浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何实现Worker线程的消息通信及错误处理?
58浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙应用中实现Worker的创建与消息通信?
80浏览 • 1回复 待解决
#鸿蒙通关秘籍#主线程和Worker线程在线程模型中承担什么职责?
82浏览 • 1回复 待解决
#鸿蒙通关秘籍#线程模型中,主线程和TaskPool Worker线程有啥区别?
128浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在Worker子线程中实现文件解压并将结果返回主线程?
87浏览 • 1回复 待解决
鸿蒙Hi3861环境搭建完成,如何上手写代码?
8727浏览 • 6回复 已解决
TaskPool子线程和主线程如何通信
2304浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何解决H5环境下自定义键盘的映射问题?
59浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙Worker线程通信的最佳实践
50浏览 • 1回复 待解决
hi3861环境编译出现编码问题
11773浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙中使用Worker实现线程间异步通信?
35浏览 • 1回复 待解决
HarmonyOS worker线程和主线程支持内存共享
517浏览 • 1回复 待解决
Ubuntu 20.04编译Openharmony3.2环境配置出错
4744浏览 • 0回复 待解决
#鸿蒙通关秘籍#如何实现鸿蒙API 13中EmbeddedUIExtensionAbility的生命周期管理?
34浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现独立执行的耗时任务?
58浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙开发中实现子线程与主线程的同步调用的关键步骤?
41浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现Swiper组件的自动播放功能?
43浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙中如何使用N-API实现线程安全的跨线程函数调用?
34浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中使用Swiper实现循环播放功能?
58浏览 • 1回复 待解决
使用Worker实现和宿主线程的双向通信,Worker可以接收和发送消息。
在Worker中实现消息处理逻辑:
bash // Worker.ets import { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS';
const workerPort: ThreadWorkerGlobalScope = worker.workerPort; workerPort.onmessage = (e: MessageEvents): void => { if (e.data === 'hello world') { workerPort.postMessage('success'); } }
在宿主线程中创建Worker对象并处理通信:
bash // Index.ets import { worker } from '@kit.ArkTS'; import { BusinessError } from '@kit.BasicServicesKit';
function promiseCase() { let p: Promise<void> = new Promise<void>((resolve: Function, reject: Function) => { setTimeout(() => { resolve(1); }, 100) }).then(undefined, (error: BusinessError) => { }) return p; }
async function postMessageTest() { let ss = new worker.ThreadWorker("entry/ets/workers/Worker.ets"); let res = undefined; let flag = false; let isTerminate = false; ss.onexit = () => { isTerminate = true; } ss.onmessage = (e) => { res = e.data; flag = true; console.info("worker:: res is " + res); } ss.postMessage("hello world"); while (!flag) { await promiseCase(); }
ss.terminate(); while (!isTerminate) { await promiseCase(); } }
@Entry @Component struct Index { @State message: string = 'Hello World'; build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) .onClick(() => { postMessageTest(); }) } .width('100%') } .height('100%') } }