jni中的回调

时间:2009-09-07 20:28:15

标签: java c java-native-interface php-extension php-internals

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

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

我可以从扩展程序同步检索项目,但现在我不知道如何异步执行。

  • 我的C代码有没有办法给出java以后可以调用的函数的指针?
  • OR是否有可能每次C代码要求异步检索项目时创建一个java线程,然后java线程调用一个可以将项目返回给用户的C函数?

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

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

1 个答案:

答案 0 :(得分:4)

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

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