多线程入门6-使用线程句柄

admin2020-12-09  481

一般我们可以使用 thread.invoke() 函数简单快捷的创建线程,
而 thread.create() 的作用和用法与 thread.invoke() 一样,唯一的区别是 thread.create()会返回线程句柄。

线程句柄可以用来控制线程(暂停或继续运行等等),
如果不再使用线程句柄,应当使用 raw.closehandle() 函数关闭线程句柄(这个操作不会关停线程)

有了线程句柄,我们可以使用 thread.waitOne() 等待线程执行完毕,
而且 thread.waitOne() 还可以一边等待一边处理界面消息(让界面不会卡死)。

下面看一下aardio范例里的多线程入门示例:

 

import console;

var thrdHandle = thread.create(
    function(){
        import console;
        thread.lock("写控制台",function(){
            console.log("线程在执行",thread.getId() )
        })
        
        //这里如果高级点可以用 thread.event来实现信号判断,参考本目录下的定时器范例
        while(!thread.get("红灯停")){
            console.log("线程在执行",time() )
            sleep(1000)
        }
        console.log("停了!")
    }
)
   
thread.suspend(thrdHandle) //使用线程句柄就可以控制线程,例如下面的函数暂停线程
thread.resume(thrdHandle) //线程恢复运行

var act = thread.stillActive(thrdHandle) //线程是否在运行

sleep(3000)

//每个线程的全局变量环境都是独立的,而 thread.set() 则用于设置所有线程共享的全局变量。
thread.set("红灯停", true)
thread.waitAll(thrdHandle)

//句柄不用的时候一定要用下面的函数关闭(切记:句柄是绝对不会自动释放的),关闭句柄并不会关闭线程
raw.closehandle(thrdHandle)
thread.invoke(
    function(){
        import console;
        console.log("线程在执行",thread.getId() )   
    }
)
sleep(100)
console.pause(true);

 

您可以使用 thread.command 在线程间交互通信,请参考《多线程开发入门》
您还可以使用 thread.event 来实现线程间的同步,请参考《多线程中的交通信号灯:thread.event》
或者使用 thread.works、thread.manage 这些线程管理器来批量的管理线程句柄,
请参考此目录中的其他范例。

转载请注明原文地址: https://seopai.com/read-40.html
最新回复(0)