线程函数
说明
tip
- iOS的js引擎天生是单线程模式,无法实现多线程。这里的thread底层实现是多jsvm虚拟机模式
- 多jsvm代表这启动多个不同的js虚拟机,在iOS进程中运行,相互之间进程数据是隔离的。
- 这里的线程是worker模块的简化版,可以直接执行代码片段的,比worker模块简单好用
- 该模块从EC 脱机版本5.0.0+开始适配
ThreadClient.execAsyncFile 线程执行JS文件
- 线程执行js文件,只能执行iec文件中的js文件
- 可以在工程的src目录下新建 thread1/sub.js文件,thread1和js目录平级,使用的时候path传递的值就是 thread1/sub.js
- 子线程不会自动加载其他js文件,所以引用类库的时候,请使用 require函数,例如
- let lib2 = require("work1/lib1.js")
- logd(lib2.add(1, 2))
- 上面代码是引用 src 文件夹,work1文件夹下的lib1.js文件
- @param path 就是文件路径,例如 thread1/sub.js
- @returns
{ThreadClient}
function main() {
let name = "thread2";
let th = thread.newThread(name)
// 增加回调,可以不写
th.addCallback("f1", function (name, data) {
logd("callback " + data)
return "ok"
});
th.execAsyncFile("thread1/sub.js");
while (!isScriptExit()) {
logd("main " + new Date())
sleep(1000)
}
}
main();
ThreadClient.execAsyncStr 线程执行JS字符串
- 开启异步线程执行js代码字符串
- 这个没有行号的,因为是动态的js代码
- @param funcStr 代码字符串
- @returns
{ThreadClient}
function main() {
let name = "thread2";
let th = thread.newThread(name)
th.execAsyncStr("logd('123');");
while (!isScriptExit()) {
logd("main " + new Date())
sleep(1000)
}
}
main();