首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对NPN_PluginThreadAsyncCall的顺序调用

对NPN_PluginThreadAsyncCall的顺序调用
EN

Stack Overflow用户
提问于 2012-07-06 08:32:59
回答 2查看 613关注 0票数 0

在我的插件中,我创建了一个线程(在我的例子中使用pthread )来监听外部事件。当事件发生时,我想要回传给JavaScript。据我所知,我只能在插件线程中调用NPN_*方法。因此,我需要在我的线程中利用NPN_PluginThreadAsyncCall来调用其他NPN_*方法来进行JavaScript通信。所以一个简单的流程是

我现在面临的问题是,如果外部事件连续发生,例如两个不同数据输入的事件,有时我会在回调中收到相同的数据两次(返回两个不同数据的时间占一半)。我猜这是因为NPN_PluginThreadAsyncCall是一个异步调用,当两个连续的事件回调时,NPN_PluginThreadAsyncCall被调用两次,在第一个事件的JavaScript回调实际发生之前,数据已经被第二个调用覆盖了。

最初,我想返回的事件数据是一个全局变量。但我也尝试将其更改为局部变量,这似乎没有帮助。有没有其他方法可以让我的代码连续调用来与JavaScript对话?

我做了一些研究发现了这个,How to callback plugin thread on Safari 5.1 on OSX?。但我还是不太明白(我在Windows上工作)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-06 23:48:58

您可以将其实现为互斥的std::deque,其中第一个插入的数据是您弹出的第一个数据。

只需确保您不会同时推送或弹出(使用互斥)。这就是我在插件中使用的:)

票数 0
EN

Stack Overflow用户

发布于 2012-07-06 22:33:11

听起来您只是在覆盖数据(在处理第一个异步调用之前发生两个事件的情况下)。

有两种方法可以解决这个问题:

  • 使用NPN_PluginThreadAsyncCalluserData参数传递您的数据
  • 使用线程安全容器(例如,受互斥锁保护的std::listqueue )存储事件数据(事件将数据放入其中,异步处理程序检索并处理数据)

您链接的问题是针对NPN_PluginThreadAsyncCall不可用或无法工作的另一个问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11354397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档