0

Java アプリケーションから実行時間の長い JNI メソッドを呼び出しています。JNI メソッドはいくつかのことを行いますが、各ステップの後にステータス メッセージを取得したいと考えています。

私はこのJNIスニペットを持っています:

JNIEXPORT void JNICALL Java_my_package_Engine_start(JNIEnv * env, jclass class, jstring address, jstring file) {
    longRunningMethod1();
    // notify java that method 1 is finished

    longRunningMethod2();
    // notify java that method 2 is finished

    longRunningMethod3();    
}

そして、私はこの方法でメソッドを呼び出しています:

Engine.start(param1, param2);

このメソッドは、JNI のすべてが完了するまでブロックされます。これで問題ありませんが、ステータス情報を取得して処理したいと考えています。

puts() のようなものが役立つでしょうか?

4

2 に答える 2

1

Java 側に通知する 1 つの方法は、メソッドを呼び出すことです。

再利用可能なソリューションでは、通知をインターフェイスのメソッドとして定義します。ネイティブ メソッドを変更して、インターフェイスを実装するオブジェクトをパラメーターとして受け入れるようにします。興味深いことが起こったことを Java 側に通知するときが来たら、そのオブジェクトで適切なメソッドを呼び出します。

デザインパターンを気にするなら、これは基本的に戦略パターンです。

于 2013-02-18T12:28:56.080 に答える
0

「Andreas Grapentin」が述べたように、私はそれを行いました:

JNI メソッドを複数の小さなメソッドに分割して、アプリ内の呼び出し間で更新された進行状況を処理できませんか?

ここでは本当に問題なく、魅力のように機能します。ありがとうございました!

于 2013-02-21T12:36:18.397 に答える