javascript线程模拟

作者: Robin 分类: Asp.net 发布时间: 2008-07-21 21:54

在javascript中,是没有线程的,只能模拟一个了,前些日子写了个,现在把它贴出来。
  thread.js:
/**
* 线程管理类
* @author zxub 2006-06-12
*/
function Thread(_task,_delay,_times)
{
    this.runFlag=false;
    this.busyFlag=false;
    this.taskArgs=Array.prototype.slice.call(arguments,3);
    
    if (_times!=undefined)
    {
        this.times=_times;
    }
    else
    {
        this.times=1;
    }
    
    var _point=this;
    
    this.timerID=-1;
    
    this.start=function()
    {
        if (this.runFlag==false)
        {
            this.timerID=window.setInterval(_point.run,_delay);            
            this.runFlag=true;
        }
    }
    
    this.run=function()
    {
        if (_point.busyFlag) return;
        if (_point.times==-1)//无限循环
        {
            _task(_point.taskArgs);
        }
        else if (_point.times>0)
        {
            _task(_point.taskArgs);
            _point.times-=1;
            if (_point.times==0)
            {
                window.clearInterval(this.timerID);
            }                                  
        }        
    }
    
    this.sleep=function()
    {
        this.busyFlag=true;
    }
    
    this.resume=function()
    {
        this.busyFlag=false;
    }
    
    this.abort=function()
    {        
        window.clearInterval(this.timerID);        
    }
}
例子如下:
<html>
<head>
<title>测试</title>
<meta http-equiv=””Content-Type”” content=””text/html; charset=utf-8″” />
<script type=””text/javascript”” xsrc=”” mce_src=””thread.js””></script>    
<style type=””text/css””>
<!–
body,tr,td { font-size: 12px;}
–>
</style>
</head>
<body>
<script>
var func=function(_o)
{
    document.getElementById(_o).innerHTML=parseInt(document.getElementById(_o).innerHTML)+1;
}
var t1=new Thread(func,50,121,””t1″”);
var t2=new Thread(func,200,20,””t2″”);
</script>
<input type=””button”” value=””start1″” onclick=’t1.start();’></input>
<input type=””button”” value=””sleep1″” onclick=’t1.sleep();’></input>
<input type=””button”” value=””resume1″” onclick=’t1.resume();’></input>
<input type=””button”” value=””abort1″” onclick=’t1.abort();’></input>
<input type=””button”” value=””start2″” onclick=’t2.start();’></input>
<input type=””button”” value=””sleep2″” onclick=’t2.sleep();’></input>
<input type=””button”” value=””resume2″” onclick=’t2.resume();’></input>
<input type=””button”” value=””abort2″” onclick=’t2.abort();’></input>
<div id=””t1″”>0</div> | <div id=””t2″”>0</div>
<input type=””button”” value=””t1.timerID”” onclick=’alert(t1.timerID);’></input>
<input type=””button”” value=””t2.timerID”” onclick=’alert(t2.timerID);’></input>
</body>
</html>

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签云