jni 中的回调

发布于 2024-08-03 15:57:23 字数 463 浏览 11 评论 0原文

有没有办法从 C 向 java 代码传递回调。并且调用立即返回。稍后,完成任务后,java 代码可以调用该回调。

我有一个 php 的 C 扩展,它调用 java 存储来在其中存储一些项目。可以通过同步和异步方法从存储中检索项目(我为存储提供键列表和回调,它调用回调并返回其中的项目)。

我能够从扩展中同步检索项目,但现在我不知道如何异步执行。

  • 有什么方法可以让我的 C 代码提供一个指向 java 稍后可以调用的函数的指针吗?
  • 或者是否有可能每次 C 代码要求异步检索项目时我都会创建一个 Java 线程,然后该 Java 线程调用一个可以将项目返回给用户的 C 函数?

作为最后的手段,我可​​能必须在 C 代码中创建一个线程,并在该线程中对可以从 java 检索的键进行排队。

或者 zend 是否有任何支持允许我对任务进行排队以及 zend 可以为队列中的每个任务一一调用的回调?

Is there any way to pass a callback to java code, from C. And the call returns immediately. Later on, after completing the task, the java code can invoke that callback.

I have a C extension for php that calls a java store to store some items in it. The items can be retrieved from store in synchronous and asynchronous methods (I provide the store with list of keys and a callback and it invoke the callback and return the item in it).

I am able to retrieve the items synchronously from extension, but now I don't know how to do it asynchronously.

  • Is there any way that my C code can give a pointer to function that java can later invoke?
  • OR is it possible that I create a java thread everytime C code asks to retrieve items asynchronously, and that java thread then invoke a C function that can return the items back to user?

As a last resort I may have to create a thread in C code and queue up keys in that thread that it can retrieve from java.

Or is there any support in zend that allows me to queue up tasks and a callback that zend can invoke one by one for every task in queue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

云雾 2024-08-10 15:57:23

java调用C函数的方式是原生类方法。只需在java中创建一些具有本机方法的类(可能实现您的回调接口)即可。编译它并使用 JDK 中的 javah 工具进行处理 - 这将创建带有函数签名的标头。然后你就可以在你的本地代码中实现这个功能了。

当您需要提供回调时 - 通过 NewObject() 创建此类的新实例并传递给 java 代码。

The way for java to call C functions is native class methods. Just make some class in java (probably implementing your callback interface) that has native method. Compile it and process with javah tool from JDK - this creates header with function signature. Then you can implement this function in your native code.

When you need to supply callback - create a new instance of this class via NewObject() and pass to java code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文