6

私は最近、いくつかの既存のC ++ライブラリを移植するために、JNIを実験しています。

テストの一環として、単純な「helloworld」プログラムを作成しました。メッセージを出力するだけの単純なネイティブ関数をC++で呼び出しています。プログラムの実行中に観察したいくつかの動作について少し興味があります-すべてのネイティブ関数のメッセージ/応答はJavaSystem.out.printの後に出力されるようです。これは、ネイティブ呼び出しがJava呼び出しの後に実行されるためですか、それともこの動作を無視するだけですか?

public static void main(String[] args) {
        HelloWorld app = new HelloWorld();
        System.out.println("say");
        app.print();

        System.out.println("what");
        app.print();
}

出力は次のようになります。

say
what
hola, world !
hola, world !

ネイティブ関数は次のとおりです。

Java_HelloWorld_print(JNIEnv *env, jobject obj) {
    printf("hola, world !\n");
    return;
}
4

1 に答える 1

3

これは、Java呼び出しの後にネイティブ呼び出しが実行されるためです。

いいえ、それはほぼ確実に、出力がC++側とJava側でどのようにバッファリングされるかに関係しています。

呼び出しの実行順序は、コードに表示されているとおりです(Java、C ++、Java、C ++)。

于 2012-04-28T06:57:24.163 に答える