4

CからコールバックをJavaコードに渡す方法はありますか。そして、呼び出しはすぐに戻ります。後でタスクを完了した後、Java コードはそのコールバックを呼び出すことができます。

一部のアイテムを格納するためにJavaストアを呼び出すphp用のC拡張機能があります。アイテムは同期および非同期メソッドでストアから取得できます (キーのリストとコールバックをストアに提供し、コールバックを呼び出してアイテムを返します)。

アイテムを拡張機能から同期的に取得することはできますが、非同期的に行う方法がわかりません。

  • 私のCコードがJavaが後で呼び出すことができる関数へのポインタを与える方法はありますか?
  • または、C コードがアイテムを非同期的に取得するように要求するたびに Java スレッドを作成し、その Java スレッドがアイテムをユーザーに返すことができる C 関数を呼び出すことは可能ですか?

最後の手段として、C コードでスレッドを作成し、Java から取得できるキーをそのスレッドでキューに入れる必要がある場合があります。

または、タスクをキューに入れることができる zend のサポートと、キュー内のすべてのタスクに対して zend が 1 つずつ呼び出すことができるコールバックはありますか?

4

1 に答える 1

4

Java が C 関数を呼び出す方法は、ネイティブクラス メソッドです。ネイティブメソッドを持つJava(おそらくコールバックインターフェイスを実装する)でいくつかのクラスを作成するだけです。それをコンパイルし、JDK の javah ツールで処理します。これにより、関数署名付きのヘッダーが作成されます。次に、この関数をネイティブ コードに実装できます。

コールバックを提供する必要がある場合 - NewObject() を介してこのクラスの新しいインスタンスを作成し、Java コードに渡します。

于 2009-09-07T22:55:06.360 に答える