【鸿蒙 NEXT】多线程taskpool 和worker

  1. taskpool
  testTaskpool() {
    let task1: taskpool.Task = new taskpool.Task(func, 1, 2);
    let task2: taskpool.Task = new taskpool.Task(func, 2, 2);
    let task3: taskpool.Task = new taskpool.Task(func, 3, 2);
    taskpool.execute(task1);
    taskpool.execute(task2);
    taskpool.execute(task3);
    console.log('testTaskpool');
  }


@Concurrent
function func(num: number, num2: number) {
  console.log('task num = ' + num + ' num2 = ' + num2);
}
  1. worker

在模块中的build-profile.json添加:

"buildOption": {
    "sourceOption": {
      "workers": [
        "./src/main/ets/workers/worker.ets"
      ]
    }
  }
testWorker() {
    // 创建Worker对象
    let workerInstance = new worker.ThreadWorker('entry/ets/workers/worker.ets');

    // 注册onmessage回调,当宿主线程接收到来自其创建的Worker通过workerPort.postMessage接口发送的消息时被调用,在宿主线程执行
    workerInstance.onmessage = (e: MessageEvents) => {
      let data: string = e.data;
      console.info("workerInstance onmessage is: ", data);
    }

    // 注册onerror回调,当Worker在执行过程中发生异常时被调用,在宿主线程执行
    workerInstance.onerror = (err: ErrorEvent) => {
      console.info("workerInstance onerror message is: " + err.message);
    }

    // 注册onmessageerror回调,当Worker对象接收到一条无法被序列化的消息时被调用,在宿主线程执行
    workerInstance.onmessageerror = () => {
      console.info('workerInstance onmessageerror');
    }

    // 注册onexit回调,当Worker销毁时被调用,在宿主线程执行
    workerInstance.onexit = (e: number) => {
      // 当Worker正常退出时code为0,异常退出时code为1
      console.info("workerInstance onexit code is: ", e);
    }

    // 向Worker线程发送消息
    workerInstance.postMessage('1');

  }

worker.ets

// worker.ets
import { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS';

const workerPort: ThreadWorkerGlobalScope = worker.workerPort;

// 注册onmessage回调,当Worker线程收到来自其宿主线程通过postMessage接口发送的消息时被调用,在Worker线程执行
workerPort.onmessage = (e: MessageEvents) => {
  let data: string = e.data;
  console.info('workerPort onmessage is: ', data);

  // 向主线程发送消息
  workerPort.postMessage('2');
}

// 注册onmessageerror回调,当Worker对象接收到一条无法被序列化的消息时被调用,在Worker线程执行
workerPort.onmessageerror = () => {
  console.info('workerPort onmessageerror');
}

// 注册onerror回调,当Worker在执行过程中发生异常被调用,在Worker线程执行
workerPort.onerror = (err: ErrorEvent) => {
  console.info('workerPort onerror err is: ', err.message);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值