HarmonyOS开发,Worker线程、Taskpool线程如何与宿主线程通信
Worker支持通过PostMessage往父线程抛任务。TaskPool支持通过sendData往父线程发消息,触发任务。
·
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]);:- 调用
workerInstance的postMessage方法向 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.Task的sendData方法,将计算结果res发送给父线程。父线程可以通过监听相应事件来接收这些数据。
- 调用
更多推荐



所有评论(0)