【问题标题】:How to send events/signal from C to Java in JNI如何在 JNI 中将事件/信号从 C 发送到 Java
【发布时间】:2011-02-18 19:42:42
【问题描述】:

是否有任何机制通过 JNI 从 C 向 Java 发送异步事件/信号,反之亦然?我需要捕获从 C 到 Java 的信号/事件。

【问题讨论】:

    标签: java c events java-native-interface signals


    【解决方案1】:

    这听起来有点棘手,因为 JNI 应该是单向的:Java 代码可以调用一个本地方法,该方法当然可以回调到 Java 代码中,但它本身不能启动该过程。

    但这也不是不可能的,我认为最直接的解决方案是在收到信号之前进行本机调用。

    另一种选择是编写一个 JVMTI 代理,它可以主动干扰正在运行的 VM。

    但是,如果我们谈论的是 UNIX 信号,那么您可以使用非公共 API(因此在未来和 Sun VM 特定的情况下无法保证)但现有的 sun.misc.Signal 类来处理。

    【讨论】:

      【解决方案2】:

      您可以从 C 代码调用 Java 方法。请参阅 JNI 文档。另见http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html

      【讨论】:

      • 我已经在使用它了,但我真正需要的是一些东西,我可以在 java 中阻塞一些资源,然后我可以发送一个事件/信号来解除阻塞,这应该是异步的。
      • 您当然可以将环境指针与对象句柄一起放入 C 中,然后可以简单地通知它,前提是环境指针在 Java -> 函数调用后仍然有效。
      猜你喜欢
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 2011-12-11
      相关资源
      最近更新 更多