多线程入门7-管理多线程

admin2020-12-09  2.2K+

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通常是用于界面线程里管理工作线程,上面为了简化代码仅仅用到了控制台。

转载请注明原文地址: https://www.aardio.net/read-41.html
最新回复(0)
多线程(thread)
多线程(thread)