2010-11-16 41 views
5

我需要让一段代码总是独立于其他代码运行。有没有在JavaScript中创建线程来运行此功能的方法?在javascript中的线程(或类似的东西)

- 为什么的setTimeout不工作对我来说

我试过,但它运行只是一个单一的时间。如果我递归地调用函数,它会在一段时间后抛出错误“太多的递归”。我需要每运行100个milis(这是一个与嵌入式系统的通信)。

--as你问,这里去一些代码

function update(v2) { 
    // I removed the use of v2 here for simplicity 
    dump("update\n"); // this will just print the string 
    setTimeout(new function() { update(v2); }, 100); // this try doesn't work 
} 
update(this.v); 

它抛出 “太多递归”。

+0

我想看看一些代码:)也许有些东西可以改进... – 2010-11-16 13:46:38

+0

@fcalderan那里是 – 2010-11-16 13:56:42

+0

好的,1)dump()是做什么的? 2)如果你不使用,你为什么通过一个论点? 3)try/catch试图抓住什么? =)4)为什么你创建一个函数的实例?如果你删除'新'的构造函数?这个代码的目的是什么? – 2010-11-16 14:02:50

回答

2

获得了你的功能去掉new关键字的环传递到setTimeout(),它应该工作。

function update(v2) { 
try { 
    dump("update\n"); 
} catch(err) { 
    dump("Fail to update " + err + "\n"); 
} 
setTimeout(function() { update(v2); }, 100); 
} 
update(this.v); 

或者只是使用setInterval()

function update(v2) { 
try { 
    dump("update\n"); 
} catch(err) { 
    dump("Fail to update " + err + "\n"); 
} 
} 
var this_v = this.v; 
setInterval(function() {update(this_v);}, 100); 

编辑:在一个变量引用this.v,因为我不知道是什么的this的价值是在应用程序中。

2

window.setTimeout()是你需要的。

+0

setInterval怎么样? – Stephen 2010-11-16 13:30:30

+0

是的,setInterval()将是你所需要的。 – 2010-11-16 13:37:29

+0

我试了一下,它只用了一次。如果我递归地调用函数,它会在一段时间后抛出错误“太多的递归”。 – 2010-11-16 13:38:09

4

我假设你问的是在另一个线程上执行一个函数。但是,Javascript不支持多线程。

参见:Why doesn't JavaScript support multithreading?

在所有的主流浏览器的Javascript引擎运行在单个线程。如上文所述,在不同线程上运行函数会导致并发问题。例如,两个函数同时修改一个HTML元素。

3

正如其他人在这里指出的,也许多线程并不是你实际需要的情况。 setInterval可能就足够了。然而,如果你真的需要多线程,JavaScript通过web工作者功能支持它。基本上,主JavaScript线程只能通过事件和消息传递(本质上是字符串)与其他线程(工作者)交互。工作人员无法访问DOM。这避免了任何并发问题。

这里是网络工作者规格:http://www.whatwg.org/specs/web-workers/current-work/

更教程处理:http://ejohn.org/blog/web-workers/

+0

请注意,Web工作人员当前不支持任何版本的Internet Explorer。 – 2010-11-16 13:50:55

0

U可以尝试,而不是递归性

+0

循环锁定您的应用程序 – 2011-11-01 23:59:02

1

也许你应该查看关于javascirpt的工人(专门的Web Workers提供了一个简单的方法让web内容在后台线程中运行脚本),这里有一篇很好的文章,解释了它的工作原理以及如何使用它。 HTML5 web mobile tutororial

相关问题