#鸿蒙通关秘籍#鸿蒙中如何实现普通对象的跨线程传递?

HarmonyOS
3天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
温柔余生

普通对象在跨线程传递时通过拷贝的形式实现。线程收到的对象内容与发送的对象内容一致,但每个对象指向各自线程的隔离内存区。例如JavaScript的标准对象如ObjectArrayMap等就是通过这种方式实现跨线程通信。

typescript // Test.ets export class TestA { constructor(name: string) { this.name = name; } name: string = 'ClassA'; }

// Index.ets import { taskpool } from '@kit.ArkTS'; import { BusinessError } from '@kit.BasicServicesKit'; import { TestA } from './Test';

@Concurrent async function test1(arg: TestA) { console.info("TestA name is: " + arg.name); }

@Entry @Component struct Index { @State message: string = 'Hello World';

build() { RelativeContainer() { Text(this.message) .id('HelloWorld') .fontSize(50) .fontWeight(FontWeight.Bold) .alignRules({ center: { anchor: 'container', align: VerticalAlign.Center }, middle: { anchor: 'container', align: HorizontalAlign.Center } }) .onClick(() => { let objA = new TestA("TestA"); let task = new taskpool.Task(test1, objA); taskpool.execute(task).then(() => { console.info("taskpool: execute task success!"); }).catch((e:BusinessError) => { console.error(taskpool: execute task: Code: ${e.code}, message: ${e.message}); }) }) } .height('100%') .width('100%') } }

分享
微博
QQ
微信
回复
2天前
相关问题
是否支持Context线程传递
1857浏览 • 1回复 待解决