pluginthreadasynccall挂起浏览器

时间:2011-09-30 06:57:49

标签: npapi

我需要从我的插件调用javascript函数。为了做到这一点,我使用npnfuncs-> pluginthreadasynccall(savedinstance,wcfEventForwarder,NULL)生成了一个线程。在wcfEventForwarder线程函数内部,我正在等待由另一个库发布的消息(在POSIX消息Q上)。我的目的是接收这些消息,然后将数据(在这些消息中收到)传递给Javascript。 问题是,当我使用来自Invoke的pluginthreadasynccall(...)spwaing线程时,浏览器挂起,我无法再与浏览器交互。能帮我解决一下吗?

此致 Souvik

2 个答案:

答案 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中调用?