Worker支持通过PostMessage往父线程抛任务。TaskPool支持通过sendData往父线程发消息,触发任务。

1. worker线程 代码示例

创建一个 Worker 线程,并调用postMessage向该 Worker 线程传递数据。

import { worker } from '@kit.ArkTS'; 
 
const workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 
let buffer = new ArrayBuffer(8); 
workerInstance.postMessage(buffer, [buffer]);
代码解释
  • 利用 worker.ThreadWorker 构造函数创建一个新的 Worker 线程实例。"entry/ets/workers/worker.ets" 是 Worker 线程要执行的脚本文件路径,意味着 Worker 线程将运行该文件内的代码逻辑。
  • workerInstance.postMessage(buffer, [buffer]);
    • 调用 workerInstancepostMessage 方法向 Worker 线程发送消息。
    • 第一个参数 buffer 是要发送的数据内容,这里是之前创建的 ArrayBuffer 对象。
    • 第二个参数 [buffer] 是传输列表,用于指定哪些数据要进行零拷贝传输。将 buffer 放入传输列表意味着把 buffer 的所有权转移给 Worker 线程,发送后主线程将无法再访问该 buffer

2. taskpool线程 代码示例

定义一个并发函数 ConcurrentFunc,在函数内部进行计算,并将计算结果通过 taskpool.Task.sendData 方法发送给父线程。

import { taskpool } from '@kit.ArkTS'; 

@Concurrent 
function ConcurrentFunc(num: number): number { 
  let res: number = num * 10; 
  taskpool.Task.sendData(res); 
  return num; 
}
代码解释
  • @Concurrent
    • 这是一个装饰器,用于标记 ConcurrentFunc 函数为并发函数。被标记的函数可以在 TaskPool 中并行执行,有助于提高程序的整体性能。
  • function ConcurrentFunc(num: number): number {
    • 定义名为 ConcurrentFunc 的函数,它接收一个 number 类型的参数 num,并返回一个 number 类型的值。
  • taskpool.Task.sendData(res);
    • 调用 taskpool.TasksendData 方法,将计算结果 res 发送给父线程。父线程可以通过监听相应事件来接收这些数据。
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐