# Worker系统API文档

# 引擎环境

#engine.Game

游戏类,包含着worker系统。
通过engine.game来获取当前游戏实例。 (仅介绍worker相关成员)

成员 类型 注释
createWorkerJob (jobPath: string, data: object) => WorkerJob 创建任务
jobPath对应任务文件的路径。路径规则请看下方详解。
data是交互数据块,用wx.createSharedArrayBuffer()创建的共享内存来进行交互;
<!-- initWorkerSystem ( ) => void

任务文件路径

使用不加文件后缀名的相对路径即可。
比如说:
worker文件夹路径是assets/worker
任务文件路径是assets/worker/jobs/myJob.ts
这时应game.createWorkerJob("jobs/myJob")

#engine.WorkerJob

通过game.createWorkerJob()获取到的任务实例。

成员 类型 注释
data obejct (只读)创建任务时创建的交互数据块
jobPath string (只读)任务文件路径
status "init"|"starting"|"running"|"suspended"
|"destroying"|"destroyed"|"invalid"
任务状态,请看表格下方详解
start (workCallback?: (WorkerJob => void)) => void 启动任务,只能启动状态为init的任务;
参数是该任务的回调。回调的参数是该Job,this也是该Job;
如果不提供回调,则会跳过引擎内的任务回调阶段,worker内仍是一帧跑一次。
suspend ( ) => void 暂停任务,只能暂停状态为starting或者running的任务;
任务暂停之后,引擎内的任务回调也会跳过。
resume ( ) => void 重启任务,只能重启状态为suspended的任务;
重启之后,状态重新变为starting。
setWorkCallback (workCallback?: (WorkerJob => void)) => void 设置任务回调,可在任何时候设置,当帧末的回调就会改变。
dispose ( ) => void 终止任务,该操作不可逆;
终止之后,当帧末的回调就会停止执行;
下一帧开始worker内也不会继续跑该任务。

任务状态status

  • 新建任务后,任务不会立刻启动,状态为init
  • start()了之后任务启动,状态变为starting
  • worker环境内执行了一次任务之后,状态变为running(所以可以通过状态来判断worker有没有开始执行);
  • suspend()了之后,状态变为suspended
  • resume()了之后,状态变为starting;worker再执行一次之后变为running
  • dispose()了之后,状态变为destroying;帧末进行真实销毁,状态变为destroyed

任务回调Tips
可以通过this.data来访问数据,也可通过job.data来访问数据。

const job = game.createJob(...);
job.start(function (job) {
    // 两者都可以
    this.data.num.buffer...
    job.data.num.buffer...
});

# Worker环境

#Job

代表一类任务的抽象类,用户以实现该类的方法来创建worker任务。

成员 类型 注释
data object 引擎内创建的交互数据块
init abstract ( ) => void 初始化,worker内创建任务时调用
update abstract ( ) => void 在update里实现每帧的真实工作;
可通过访问this.data来获取交互数据块