我正在尝试创建一个NPAPI插件来监听macbook上的媒体密钥,并将其传递给javascript以控制pandora或soundcloud之类的东西。我使用的是Spotify的SPMediaKeyTap库,它只包装了在单独线程上运行的CGEventTap。
我的问题是我使用npn_invoke回调javascript。这正常工作,但是当它从CGEventTap回调触发时,它会使插件崩溃。我意识到这需要从插件线程运行,我已经尝试通过使用NSObject performSelectorOnMainThread和NSObject performSelector:onThread将其传递回主线程,并将其与我存储在主插件线程创建方法中的线程一起使用。这两种解决方案在任何npn调用时都会崩溃。在处理导致状态对于NPN浏览器交互调用无效的CGEventTap事件时,还会发生其他事情吗?
发布于 2012-01-11 00:14:41
不要试图通过像这样保存线程来猜测线程模型;只需使用performSelectorOnMainThread调用NPN方法即可。我一直都在这样做,它工作得很好,所以我猜你的跨线程编组方法中的一些东西没有按它需要的方式工作。
https://stackoverflow.com/questions/8650094
复制相似问题