HarmonyOS Worker callGlobalCallObjectMethod 调用方法的执行线程

// entry
const workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ts");
class TestObj {
  private message : string = "this is a message from TestObj"
  public getMessage() : string {
    return this.message;
  }
  public getMessageWithInput(str : string) : string {
    return this.message + " with input: " + str;
  }
}
let registerObj = new TestObj();
// 在ThreadWorker实例上注册registerObj
workerInstance.registerGlobalCallObject("myObj", registerObj);

// worker.ts
import worker, { MessageEvents } from '@ohos.worker';

const workerPort = worker.workerPort;
workerPort.onmessage = (e: MessageEvents): void => {
  try {
    // 调用方法无入参
    let res : string = workerPort.callGlobalCallObjectMethod("myObj", "getMessage", 0) as string;
    console.info("worker:", res) // worker: this is a message from TestObj
  } catch (error) {
    // 异常处理
    console.error("worker: error code is " + error.code + " error message is " + error.message);
  }
}

demo 如上

worker 通过callGlobalCallObjectMethod 调用getMessage 方法,getMessage 的执行线程 本地打印process.tid 还是宿主线程(主线程),非worker 子线程。

HarmonyOS
7天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

registerGlobalCallObject注册的对象中的方法在worker线程中通过callGlobalCallObjectMethod 调用时,是运行在宿主线程上的。

分享
微博
QQ
微信
回复
6天前
相关问题
Worker线程如何销毁?
456浏览 • 1回复 待解决
Worker线程内存如何共享
2437浏览 • 1回复 待解决
Worker宿主线程必须是主线程吗?
567浏览 • 1回复 待解决
HarmonyOS Worker 与主线程通信问题
94浏览 • 1回复 待解决
如何创建一个worker线程
1042浏览 • 1回复 待解决