线程函数
说明
提示
- iOS的js引擎天生是单线程模式,无法实现多线程。这里的thread底层实现是多jsvm虚拟机模式
- 多jsvm代表这启动多个不同的js虚拟机,在iOS进程中运行,相互之间进程数据是隔离的。
- 这里的线程是worker模块的简化版,可以直接执行代码片段的,比worker模块简单好用
- 该模块从EC 脱机版本5.0.0+开始适配
thread.execCodeAsync 异步执行代码块
- 异步执行代码块
- 这个是封装好的,直接使用即可
- @param name 线程名称
- @param func 代码块
- @param callbackName 回调的函数名称
- @param callbackFunc 回调 函数
- @return
{string}
返回的线程名称
function main() {
// 子线程无法访问外部的变量,
// 最好的方式 是 在一个js文件中写好业务逻辑,在线程中 直接调用,所有操作都在写得好的js文件中完成
thread.execCodeAsync("thread1", function () {
while (!isScriptExit()) {
sleep(1000)
logd("sub thread " + new Date())
var url = "http://baidu.com";
var pa = {"b": "22"};
var x = http.httpGet(url, pa, 10 * 1000, {"User-Agent": "test"});
logd(" result- " + x);
// 调用f1函数
let backdata = thread.invokeCallback("f1", "百度的数据:" + x)
logd("backdata " + backdata)
}
}, "f1", function (name, data) {
logd("callback " + data)
return "ok->"
})
let timex = 0
while (!isScriptExit()) {
logd("main " + new Date())
sleep(1000)
timex = timex + 1000
if (timex > 8000) {
break
}
}
// 5秒后结束线程
thread.cancelThread("thread1")
thread.stopAll();
sleep(1000)
logd("thread1 cancel " + thread.isCancelled("thread1"))
// 或者使用cancelThread
// thread.cancelThread("thread1")
}
main();
thread.invokeCallback 调用回调函数
- 调用 addCallback 设置的函数 ,通过funcName先找到,然后进行调用
- @param funcName 回调函数名称
- @param data 回调数据
- @return
{*}
函数返回的数据
function main() {
// 请看 thread.execCodeAsync 函数例子
}
main();