相关问题
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现Worker对宿主线程接口的同步调用?
1162浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙API 13中如何让Task在执行过程中通知宿主线程?
1053浏览 • 1回复 待解决
宿主线程如何向worker子线程发送消息?
1356浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何实现Worker线程的消息通信及错误处理?
1109浏览 • 1回复 待解决
Worker的宿主线程必须是主线程吗?
1395浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙应用中实现Worker的创建与消息通信?
1405浏览 • 1回复 待解决
宿主线程如何接收子线程发送的消息?
1432浏览 • 1回复 待解决
HarmonyOS在ArkTS运行环境中,只能像v8环境里的js那样在主线程执行ArkTS代码吗?
1407浏览 • 1回复 待解决
#鸿蒙通关秘籍#线程模型中,主线程和TaskPool Worker线程有啥区别?
1352浏览 • 1回复 待解决
#鸿蒙通关秘籍#主线程和Worker线程在线程模型中承担什么职责?
1137浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙Worker线程通信的最佳实践
1472浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在Worker子线程中实现文件解压并将结果返回主线程?
1429浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙中使用Worker实现线程间异步通信?
1399浏览 • 1回复 待解决
鸿蒙Hi3861环境搭建完成,如何上手写代码?
10292浏览 • 6回复 已解决
#鸿蒙通关秘籍#如何实现鸿蒙API 13中EmbeddedUIExtensionAbility的生命周期管理?
1816浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何实现鸿蒙开发中的线程间通信?
1310浏览 • 1回复 待解决
HarmonyOS Worker 与主线程通信问题
1211浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现独立执行的耗时任务?
1080浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何解决H5环境下自定义键盘的映射问题?
969浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现Swiper组件的自动播放功能?
1056浏览 • 1回复 待解决
TaskPool子线程和主线程如何通信
3589浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中使用Swiper实现循环播放功能?
1046浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙中如何使用N-API实现线程安全的跨线程函数调用?
1425浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙开发中实现子线程与主线程的同步调用的关键步骤?
1635浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙开发中避免在主线程中执行耗时操作
1478浏览 • 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%') } }