如何在JavaScript中的线程之间进行通信? 我在C++中为XFirefox扩展创建了一个XPCOM对象。我使用一个工作线程来监听事件,当它发生时,我需要在主线程上执行一些操作。显然,我不能在主线程上坐在JavaScript中等待,因为您需要能够使用浏览器(我的事件很少发生)

如何在JavaScript中的线程之间进行通信? 我在C++中为XFirefox扩展创建了一个XPCOM对象。我使用一个工作线程来监听事件,当它发生时,我需要在主线程上执行一些操作。显然,我不能在主线程上坐在JavaScript中等待,因为您需要能够使用浏览器(我的事件很少发生),javascript,multithreading,firefox,firefox-addon,Javascript,Multithreading,Firefox,Firefox Addon,我尝试在线程中执行此操作(xpcom guy发送javascript事件): 这是有效的(在主线程上,如预期的那样),但它将不确定地暂停。100毫秒后不会如预期的那样发生。您必须单击一点或调整窗口大小,然后突然调用该函数。就像JavaScript突然醒来一样。我想这是因为它发生在一个线程中 是否有更好的方法让工作线程请求主线程执行某些操作?JavaScript只有一个线程。函数调用总是阻塞,直到它们返回。如果您正在从JS与浏览器(或本例中的浏览器扩展)通信,则应确保浏览器端代码立即返回到JS,并

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

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


是否有更好的方法让工作线程请求主线程执行某些操作?

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


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

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


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

对于那些关心的人,我放弃了尝试在线程之间发送消息。我找到了一种使用objective-C++编译XPCOM对象的方法,以便使用他们的NSDistributedNotificationCenter。这让我可以在javascript很满意的主线程上获取我的事件


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

对于那些关心的人,我放弃了尝试在线程之间传递消息。我找到了一种使用objective-C++编译XPCOM对象的方法,以便使用他们的NSDistributedNotificationCenter。这让我可以在javascript很满意的主线程上获取我的事件


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

你试过了吗?

你试过了吗?

我意识到我原来的答案中实际上回答了一个完全不同的问题(自删除后),然后我开始写一个新的答案,然后意识到我只是在写你说的话,但不同的是:我会去找我!警报不会发生;我想等多久就等多久(我等了20多分钟),直到我在窗口中点击几秒钟后,警报才显示出来。线程是在扩展(pthread)中创建的,它尝试使用回调。如果我在回调中工作,崩溃。我意识到我在原来的答案中回答了一个完全不同的问题(因为被删除了),然后我开始写一个新的答案,然后意识到我只是在写你说的,但不同的是:D走我!警报不会发生;我想等多久就等多久(我等了20多分钟),直到我在窗口中点击几秒钟后,警报才显示出来。线程是在扩展(pthread)中创建的,它尝试使用回调。如果我在回调中工作,崩溃。所以我确实需要超时。
window.setTimeout( myImportantWorkFunction, 100 );