请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 856|回复: 0

[图文教程] setTimeout方式实现循环不阻塞主界面

[复制链接]

35

主题

78

帖子

170

积分
交易币
0

编程一段

Rank: 2

发表于 2017-3-16 15:40:32 | 显示全部楼层 |阅读模式
本帖最后由 佛守瓜 于 2017-3-16 16:24 编辑

适用场景:
有时只想弄个不阻塞界面的死循环检测,用线程的话很多东西不好传,所以用时钟也是可以的

优点:
简单,易学,易用,不用自己手工创建时钟;不需要用线程传一堆东西进去

缺点:
setTimeout用时钟来循环,效率可能比线程低点

尝试:
按住鼠标左键拖住主窗口界面不放,它依然在跑,完全不卡界面


[aardio] 纯文本查看 复制代码
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=434;bottom=363)
winform.add(
button={cls="button";text="开始吧";left=123;top=281;right=313;bottom=321;z=2};
edit={cls="edit";left=34;top=23;right=408;bottom=248;edge=1;multiline=1;z=1}
)
/*}}*/


winform.button.oncommand = function(id,event){
        
        //函数里用setTimeout()调用自身,异步递归,形成不卡界面的异步循环,可用于替代for while等阻塞界面的循环
        var num = 0;
        myFun = function(){
                if(num<10000){
                        num = num +1;
                        winform.edit.log( num,'\r\n' )
                        winform.setTimeout(myFun,0);//t函数里用setTimeout()调用自身 //控制快慢可设置延时
                }else {
                        winform.edit.log( "满10不走了",'\r\n' )
                }        
        }
        
        //winform.setTimeout(t,1000);//可以
        myFun();//可以
        
}

winform.show() 
win.loopMessage();



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



GMT+8, 2019-11-15 21:48 , Processed in 0.093750 second(s), 26 queries .

© 2001-2011 Powered by Discuz! X3.2.

快速回复 返回顶部 返回列表