我在 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/