相关问题
ArkTS中如何实现对象的深拷贝?
872浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何实现PixelMap对象的深拷贝?
259浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙系统中通过转移方式传递ArrayBuffer对象?
461浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在ArkTS中有效管理内存中的垃圾对象?
445浏览 • 1回复 待解决
#鸿蒙通关秘籍#在ArkTS中如何实现SharedArrayBuffer对象的跨线程共享?
564浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在OpenHarmony中实现ProtoBuf的对象编解码?
615浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙中通过napi_wrap绑定ArkTS对象与C++对象?
407浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙IPC中实现远端对象消亡通知?
295浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在ArkTS中实现模块化加载?
476浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在多个C++线程间共享ArkTS中Sendable对象?
388浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何为鸿蒙中的ArkTS对象绑定原生信息?
371浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在ArkTS中实现类的继承和方法重写?
657浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙开发中获取Context对象?
441浏览 • 2回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS中读写PurgeableMemory对象?
493浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS NEXT中利用Navigation实现对象传递?
424浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙应用中获取应用对象?
551浏览 • 1回复 待解决
如何在ArkTS中合并对象
1334浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS中创建PurgeableMemory对象?
467浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙系统中将ArkTS对象转换为native数据?
312浏览 • 1回复 待解决
如何在ArkTS中合并对象?
1880浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS中实现多层嵌套类对象属性变化的监听?
496浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS NEXT中实现页面跳转时传递类对象?
469浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS中通过ArkTS的Stack实现CSS绝对定位效果?
388浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在ArkTS中定义和使用@Styles实现组件样式的复用?
648浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙中如何实现普通对象的跨线程传递?
225浏览 • 1回复 待解决
ArrayBuffer对象在传递过程中可以通过深拷贝实现,这样在传递后每个线程都可以独立处理ArrayBuffer。默认情况下,ArkTS中的TaskPool传递ArrayBuffer数据时采用转移的方式,但可以通过调用
setTransferList([])
接口指定采用拷贝的方式。typescript // Index.ets import { taskpool } from '@kit.ArkTS'; import { BusinessError } from '@kit.BasicServicesKit';
@Concurrent function adjustImageValue(arrayBuffer: ArrayBuffer): ArrayBuffer { return arrayBuffer; }
function createImageTask(arrayBuffer: ArrayBuffer, isParamsByTransfer: boolean): taskpool.Task { let task: taskpool.Task = new taskpool.Task(adjustImageValue, arrayBuffer); if (!isParamsByTransfer) { task.setTransferList([]); } return task; }
@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 taskNum = 4; let arrayBuffer = new ArrayBuffer(1024 * 1024); let taskPoolGroup = new taskpool.TaskGroup(); for (let i: number = 0; i < taskNum; i++) { let arrayBufferSlice: ArrayBuffer = arrayBuffer.slice(arrayBuffer.byteLength / taskNum * i, arrayBuffer.byteLength / taskNum * (i + 1)); taskPoolGroup.addTask(createImageTask(arrayBufferSlice, false)); } taskpool.execute(taskPoolGroup).then((data) => {}).catch((e: BusinessError) => { console.error(e.message); }) }) } .height('100%') .width('100%') } }