如何使用js阻塞余下的处理?

listen 2006-11-18 11:06:05
如何用Js达到阻塞的效果?
就是像下面这样:
line1
line2
line3
line4

在执行完line2的程序后,想让line3及line4的代码等待指定时间后,再执行,
也就是说,在line2那里想做一个阻塞处理。

我知道,可以将line3和line4放到一个function里,
用settimeout(function,1000)来达到使line3和line4等待指定时间后再执行,
可是,我不想用这种方法,所以想请各位网友们帮忙,看再有没有别的办法??

以上,多谢了!!
...全文
1784 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
muxrwc 2006-11-21
  • 打赏
  • 举报
回复
我们伟大的zhaoxiaoyang(梅雪香@深圳) 都说没有啦。。。
还是用setTimeout吧。。。。
muxrwc 2006-11-20
  • 打赏
  • 举报
回复
<script type="text/javascript">
function gTime(n){
var d = new Date();
var s = "" + d.getHours();
s += d.getMinutes();
s += d.getSeconds() + n;
s += d.getMilliseconds();
return s;
}
alert(1);
var nt, ot = parseInt(gTime(10));
do {
nt = parseInt(gTime(0));
}; while (nt < ot);
alert(2);
</script>
怎么能不行呢??
虽然这东西很不好。不过没有错误啊。。
lantersen 2006-11-20
  • 打赏
  • 举报
回复
/**
我知道,可以将line3和line4放到一个function里,
用settimeout(function,1000)来达到使line3和line4等待指定时间后再执行,
可是,我不想用这种方法,所以想请各位网友们帮忙,看再有没有别的办法??
**/

说说这种方法有什么不妥?
listen 2006-11-20
  • 打赏
  • 举报
回复
muxrwc(王辰) 的方法也不行,会出现错误。
listen 2006-11-20
  • 打赏
  • 举报
回复
希望会有更好的解决办法
muxrwc(王辰) 的方法会导致CPU使用率100%
listen 2006-11-20
  • 打赏
  • 举报
回复
muxrwc(王辰):我是象下面这样写的,可能是我写错了。
你的代码我测了,好用,明天晚上送上分数,希望其他人还能有好的解决办法!!

function fDelay()
{
alert("fDelay1");
var d = new Date();
var nt
var currTime = d.getTime();
var delayTime = currTime+2;
alert(parseFloat(currTime)+" : "+parseFloat(delayTime));
nt = d.getTime();
while(parseFloat(nt) < parseFloat(delayTime)){
nt = d.getTime();
alert(parseFloat(nt)+" : "+parseFloat(delayTime));

}
alert("fDelay2");
}


fDelay();
alert("fAlert");
muxrwc 2006-11-19
  • 打赏
  • 举报
回复
晕用setTimeout多好啊。。。
如果不想用那么就用2楼的方法吧。。
不过要改下在用。
比如过3秒
var ot = 获取下时间。然后在加上3秒。
while (true) {
var nt = 获取下时间。
if (nt >= ot) {
执行代码.
break;
}
}
Apq001 2006-11-19
  • 打赏
  • 举报
回复
我昨晚的考虑结果是没有办法啊。

像楼上这种是不行的,因为setTimeout是要要在浏览器从JS引擎收回控制权以后其目标代码才能在指定的时间后运行,而浏览器要收回控制权又必须等当前JS栈运行完成。

即:楼上这种setTimeout里的内容永远无法执行到,哪怕设为0秒。
while(sleeping)这里是无法中止的循环。

===========
相信已经有人测过楼上的代码了,跟我说的一样吧?
listen 2006-11-19
  • 打赏
  • 举报
回复
Amwpfiqvy(给我分吧,让我升仙) :多谢你,帮我想想,急用,成功不成功一定给你分。


bigman_lfj(盐水小鱼) :你的方法我还没有试验,但从代码上分析,应该不可行,
原因是,settimeout无论有没有被执行,while语句会马上被运行,所以会形成死循环。
myvicy 2006-11-19
  • 打赏
  • 举报
回复
一个就是用settimeout,还一个就是在循环里获取代码时间差,然后执行代码并退出循环。
梅雪香 2006-11-19
  • 打赏
  • 举报
回复
js是不支持多线程的.它只能顺序的被执行,没有线程休眠这一说
实时的执行只能用setTimeout,setInterval来实现,没有其它更合理的方法.
而且,使用这个的时候,也并不是你指定3秒就一定3秒后执行,如果到三秒的时候,有程序在执行,它会等到这个程序执行完毕.
bigman_lfj 2006-11-18
  • 打赏
  • 举报
回复
嗬嗬,想起来个比较恶劣的方法。


var sleeping = true;
setTimeout("sleeping = false", 1000); // 1 second
while(sleeping) {}

强制WHILE,HEHE,倒是能实现,很恶劣吧。
Apq001 2006-11-18
  • 打赏
  • 举报
回复
这可难了,睡觉的时候给你想一下,明天才知道有没有办法。

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧