我一直在试图找到一个似乎是相对简单的方案的解决方案。我有一个运行在一个HTML页面中的JavaScript,可以调用我用C++编写的XPcom。到现在为止还挺好。从XPcom的外部事件通知JavaScript
此XPcom检索对观察员服务(do_GetService("@mozilla.org/observer-service;1")
)的引用;触发由javascript“看到”的通知; XPcom创建一个窗口线程(AFX),传递observer-service引用的副本并返回给javascript调用者;期望XPcom线程在适当的时候发送额外的通知(基于外部事件)。
然而,通知未能到达JavaScript,我最初的想法是通知方法不会传递来自“不同”线程的通知。我已经使用VStudio调试器来确认程序的顺序是否符合预期;即线程正在接收外部事件,并且正在调用通知方法...但是没有通知事件到达。
我已经阅读了不少网上的帖子,没有真正指出我想要解决的特定情况。我没有结婚用通知的想法:通过NS_DispatchToCurrentThread
- 我已经试过事件通知但不工作了或者是因为我没有从JavaScript端的“事件”提供。我可以在XPcom的环境中创建自己的一个,并且可以“通知它”。但是,那只是一个POC来证明我可以从XPcom发布活动;现在我需要JavaScript方面给我一个事件通知;
- 我试过将一个new'ed对象作为nsiSupports arg传递;但是,DispatchToCurrentThread需要一个nsiRunnable,我不知道如何传递其中的一个(idl文件不支持);
- 我也考虑用某种与nsiSupports兼容的对象'包装'事件;但是,我不确定这样做的细节。
其目的很简单。将来自XPcom线程的异步事件或通知传递给javascript的主要甚至子线程;但是,我在这里获得的牵引力不到10%。 有没有人完成过这个?或者对如何完成它有想法?
非常感谢。
哇!辉煌的弗拉基米尔......那真是太棒了......谢谢你谢谢你,谢谢你...而且你也很喜欢整理我那破烂不堪的帖子。 – IRocks