#鸿蒙通关秘籍#如何在ArkTS中实现ArrayBuffer对象的拷贝传输?

HarmonyOS
3天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
星辰巅SKU

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%') } }

分享
微博
QQ
微信
回复
3天前
相关问题
ArkTS如何实现对象拷贝
325浏览 • 1回复 待解决
如何在ArkTS合并对象
1044浏览 • 1回复 待解决
如何在ArkTS合并对象
1468浏览 • 1回复 待解决
ArkTSHTTP请求如何以JSON形式进行传输
2784浏览 • 1回复 待解决
如何在Native侧释放ArkTS对象
2330浏览 • 1回复 待解决
如何在C/C++ 创建ArkTS对象
2205浏览 • 1回复 待解决