4

有什么方法可以将回调从 C 传递给 java 代码。并且调用立即返回。稍后,在完成任务后,java 代码可以调用该回调。

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

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

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

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

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

4

1 回答 1

4

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

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

于 2009-09-07T22:55:06.360 回答