如何创建一个worker线程

在应用开发过程中,由于ts是单线程语言,在开发过程中难免会有一些耗时操作,这个时候则需要引入worker线程来协同处理。

Worker是与主线程并行的独立线程。创建Worker的线程被称为宿主线程,Worker工作的线程被称为Worker线程。创建Worker时可以传入的脚本文件在Worker线程中执行,通常在Worker线程中处理耗时的操作,需要注意的是,Worker中不能直接更新Page。

HarmonyOS
2024-05-26 17:46:43
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
lilyglp

实现方案

步骤一:编写主线程,创建worker实例

1. 导入worker

import worker from '@ohos.worker';

2. 创建worker实例,向worker线程发送消息

const workerInstance = new worker.ThreadWorker("entry/ets/workers/Worker.ts", {name:"first worker"}); 
workerInstance.postMessage("Hello worker")

3. 接收worker传回的数据,终止worker线程

workerInstance.onmessage = function(e) { 
  //work线程发送过来的信息 
  console.log('worker to main e:' + JSON.stringify(e)) 
  
  workerInstance.terminate() 
} 
  
// worker线程终止回调 
workerInstance.onexit = function() { 
  console.log('worker has been terminated') 
}

步骤二:接收主程序信息,返回数据

1. 创建worker线程用于与宿主线程通信的对象

var workerPort : ThreadWorkerGlobalScope = worker.workerPort;

2. 接收主线程传过来的数据,并作出回应

workerPort.onmessage = async function(e : MessageEvents) { 接收来自主线程的data信息   console.log('main to worker e: ' + JSON.stringify(e))  发送信息到主线程   workerPort.postMessage('hello main')  }
分享
微博
QQ
微信
回复
2024-05-27 22:35:12
相关问题
如何创建一个pgsql只读账户?
1255浏览 • 2回复 待解决
Worker线程内存如何共享
826浏览 • 1回复 待解决
在MongoDB中如何创建一个新的数据库?
2422浏览 • 1回复 待解决
如何在自定义函数中创建一个UI组件
600浏览 • 1回复 待解决
通过emitter实现worker线程通讯
390浏览 • 1回复 待解决
如何实现一个折叠组件
364浏览 • 1回复 待解决
Worker和TaskPool的线程数量是否有限制
649浏览 • 1回复 待解决
PersistentStorage如何持久化一个对象?
1207浏览 • 1回复 待解决
如何开发一个纯后台应用
611浏览 • 1回复 待解决