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

标签 javascript multithreading firefox firefox-addon

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

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

window.setTimeout( myImportantWorkFunction, 100 );

这有效(在主线程上,如预期的那样),但它会无限期地暂停。它不会按预期在 100 毫秒后发生。您必须稍微单击一下或调整窗口大小,然后突然调用该函数。就像 JavaScript 突然苏醒了一样。我认为这是因为它发生在一个线程中。

有没有更好的方式让worker请求主线程做某事?

最佳答案

JavaScript 只有一个线程。函数调用总是阻塞直到它们返回。如果你从 JS 到浏览器(在这种情况下是浏览器的扩展)进行通信,你应该确保你的浏览器端代码立即返回到 JS,并记住在你的工作完成时调用的回调(这是 setTimeout 的方式有效)。

我怀疑“点击周围”只是巧合。您是否尝试过在事件触发后立即发出警报?

关于javascript - 我如何在 JavaScript 中的线程之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/554783/

相关文章:

java - 单条语句同步?

c++ - Boost:两个工作线程,让主线程休眠直到它们都完成

html - 增加 Firebug 中 HTML 元素嵌套的限制?

html - firefox 打印多页 rowspan

javascript - 如何在加载时显示特定子行而不点击

javascript - Firefox 扩展 : adding functionality to existing Chrome XUL elements

c - 是否可以确定持有互斥体的线程?

javascript - 如何为 addEventListener 创建更短的等价物

javascript - 如何从 jQuery/JavaScript 为 Html.Hiddenfor 赋值?

html - Firefox 不会并排放置我的 div