aardio中提供了 thread.manage,thread.works 等用于管理多个线程的对象,
例如标准库中用于实现多线程多任务下载文件的 thread.dlManager 就使用了thread.works管理线程。
thread.works 用于创建多线程任务分派,多个线程执行相同的任务,但可以不停的分派新的任务,
例子:
import console;
import thread.works;
var works = thread.works( 20,
function(...) {
import console;
thread.lock("写控制台")
console.log("线程ID" + thread.getId(),",开始工作,接收到任务指令参数",...)
thread.unlock("写控制台")
return "返回值,线程ID" + thread.getId();
}
);
//分派任务
works.push("一个任务")
works.push("两个任务")
//等待任务完成
works.wait(
function(r){
console.log( "检查成果", r )
}
)
works.push("三个任务")
works.push("四个任务")
works.push("五个任务")
//退出程序前,等待任务完成并关闭所有线程
works.waitClose(
function(r){
console.log( "检查成果", r )
}
)
execute("pause")
而 thread.manage 可以用来创建多个线程执行多个不同的任务,可以添加任意个线程启动函数,
在线程执行完闭以后可以触发onEnd事件,并且把线程函数的返回值取回来,
示例如下:
import console;
import thread.manage
//创建线程管理器
manage = thread.manage(3)
var thrdFunc = function(name){
import win;
import console;
for(i=1;10;1){
console.log( thread.getId(),name )
if( !win.delay(1000) ){ //主线程可以用 manage.quitMessage()中断这个循环
console.log("收到退出指令")
return;
}
}
return 67;
}
manage.create(thrdFunc,"线程1").onEnd = function(...){
console.log("线程1的回调",...)
}
manage.createLite(thrdFunc,"线程2").onEnd = function(){
console.log("线程2的回调")
}
manage.create(thrdFunc,"线程3")
manage.waitClose()
console.pause();
thread.manage通常是用于界面线程里管理工作线程,上面为了简化代码仅仅用到了控制台。
主题数 10 | 今日评论 0 | 今日主题 0 |