新手可能不太容易理解,aardio中的这种模式给多线程开发带来了巨大的方便,在aardio的多线程代码中基本很少看到同步锁,也很少会因为同步出现各种BUG和麻烦,以前面并列飞奔的多个火车来比喻,在aardio中每辆火车都只要愉快的往前跑就行了,不存在谁停下来等谁同步的问题。
但不可否认,工作线程中如果能直接操作窗口上的控件那会带来巨大的方便(因为工作线程需要访问界面控件的需求还是非常多的),但这违反了aardio的规则,在aardio的旧版本中这是行不通的,在aardio新版本中,我们愉快的解决了这个问题。现在aardio中可以存在一些特权对象,让一些不能在线程中直接传递的对象可以跨线程传递,例如窗口对象,下面我们看一个例子:
import win.ui;
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
button={cls="button";text="再来个多线程,可以多点几次不会乱的"; ...};
edit={cls="edit";edge=1;multiline=1;z=1; ...}
)
winform.button.oncommand = function(id,event){
thread.invoke(
function(winform){
for(i=1;10;1){
winform.edit.print( time.tick(),"线程ID:",thread.getId() );
sleep(1000)
}
},winform
)
}
winform.show()
win.loopMessage();
注意上面的线程启动函数直接写在了参数里(匿名函数),跟下面的写法作用是一样的:
//下面这个函数执行耗时操作
var doSomething = function( winform ){
for(i=1;10;1){
winform.edit.print( time.tick(),"线程ID:",thread.getId() );
sleep(1000)
}
}
thread.invoke( doSomething,winform ) //启动线程
主题数 10 | 今日评论 0 | 今日主题 0 |