如何在JavaScript中的线程之间进行通信?

时间:2009-02-16 22:11:10

标签: javascript multithreading firefox firefox-addon

我在C ++中为FireFox扩展创建了一个XPCOM对象。我正在使用工作线程来监听事件,当它发生时,我需要在主线程上做一些事情。显然,我不能只是坐在主线程上等待JavaScript,因为你需要能够使用浏览器(我的事件很少发生)。

我尝试在线程中执行此操作(xpcom人发送javascript事件):

window.setTimeout( myImportantWorkFunction, 100 );

这适用(在主线程上,按预期),但它会无限期地暂停。它不会在100毫秒后发生。你必须点击一下或调整窗口大小,然后突然调用该函数。就像JavaScript突然醒来一样。我认为这是因为它发生在一个线程中。

工人有没有更好的方法让主线程做某事?

3 个答案:

答案 0 :(得分:0)

JavaScript只有一个帖子。函数调用总是阻塞,直到它们返回。如果您正在从JS与浏览器(或本例中的浏览器扩展)进行通信,则应确保您的浏览器端代码立即返回到JS,并记住在您的工作完成时调用的回调(这是setTimeout的方式)作品)。

我怀疑“点击”只是巧合。一旦事件被触发,您是否尝试过警报?

答案 1 :(得分:0)

对于那些关心的人,我放弃了尝试在线程之间发送消息。我找到了一种用一些Objective-C ++编译XPCOM对象的方法,这样我就可以使用它们的NSDistributedNotificationCenter。这让我可以在javascript很开心的主线程上获取我的活动。

这个问题仍然有效,但我现在可能不会花时间验证任何人的答案......

答案 2 :(得分:0)