【发布时间】:2011-02-18 19:42:42
【问题描述】:
是否有任何机制通过 JNI 从 C 向 Java 发送异步事件/信号,反之亦然?我需要捕获从 C 到 Java 的信号/事件。
【问题讨论】:
标签: java c events java-native-interface signals
是否有任何机制通过 JNI 从 C 向 Java 发送异步事件/信号,反之亦然?我需要捕获从 C 到 Java 的信号/事件。
【问题讨论】:
标签: java c events java-native-interface signals
这听起来有点棘手,因为 JNI 应该是单向的:Java 代码可以调用一个本地方法,该方法当然可以回调到 Java 代码中,但它本身不能启动该过程。
但这也不是不可能的,我认为最直接的解决方案是在收到信号之前进行本机调用。
另一种选择是编写一个 JVMTI 代理,它可以主动干扰正在运行的 VM。
但是,如果我们谈论的是 UNIX 信号,那么您可以使用非公共 API(因此在未来和 Sun VM 特定的情况下无法保证)但现有的 sun.misc.Signal 类来处理。
【讨论】:
您可以从 C 代码调用 Java 方法。请参阅 JNI 文档。另见http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html。
【讨论】: