我需要从我的插件调用javascript函数。为了做到这一点,我使用npnfuncs-> pluginthreadasynccall(savedinstance,wcfEventForwarder,NULL)生成了一个线程。在wcfEventForwarder线程函数内部,我正在等待由另一个库发布的消息(在POSIX消息Q上)。我的目的是接收这些消息,然后将数据(在这些消息中收到)传递给Javascript。 问题是,当我使用来自Invoke的pluginthreadasynccall(...)spwaing线程时,浏览器挂起,我无法再与浏览器交互。能帮我解决一下吗?
此致 Souvik
答案 0 :(得分:1)
你完全误解了NPN_PluginThreadAsyncCall的目的;它不是要启动一个新线程,而是在主线程上运行一些东西。你的wcfEventForwarder函数将在主线程上调用,所以如果你阻止它将挂起整个插件。
此函数调用的目的是为您提供一种方法来触发主线程上的回调,因为除了NPN_PluginThreadAsyncCall之外,其他线程上不能调用NPN_函数。如果你想产生另一个线程,你应该自己使用boost :: thread或线程API直接做这些(选择你的味道)。
你还应该注意到一些较新的浏览器显然已停止支持NPN_PluginThreadAsyncCall;特别是,它似乎无法在Windows 5.1或Mac上的Safari 5.1中运行,并且我在Mac上的某些配置中在多个其他浏览器(firefox和chrome)上遇到了问题。
答案 1 :(得分:0)
您是从另一个线程调用NPN_PluginThreadAsyncCall
,还是在"插件线程&#34中调用?