0

解決する必要がある問題があります:

オブジェクトを作成し、そのオブジェクトのメソッドを利用するネイティブメソッドを備えたJavaがあります。これは私の Java コードです。IssmJni という名前の Java ファイルがあり、ネイティブ メソッドが含まれています。

public static native long fac(long n);
    static {
        System.loadLibrary("FacLib");
    }
public static long facIterative(long n)
{
    return fac(n);

私のメインクラスにはこれがあります:

long result = IssmJni.facIterative(Long.parseLong(input));
    System.out.println(result);

これは私のC++コードです:メインファイル:

static jlong factorial(JNIEnv *env, jclass clazz, jlong n)
    {
        fac *f = new fac();
        jlong result = (jlong) (f->factorial(n));
        delete(f);
        return (jlong) result;
    }

ヘッダファイル:

class fac
{
    public:
    long factorial(long n);
};

fac.cpp:

#include "com_lan_factorial_FacLib.h"
#include "fac.h"

long fac::factorial(long n)
{
    long f = 1;
    long i;
    for(i = 1; i <= n; i++)
    {
         f *= i;
    }
    return f;
}

すべて正常に動作するため、UI は C++ コードと呼ばれる数値を入力し、新しいオブジェクト呼び出し fac を生成し、そのクラス fac でメソッド factorial を使用します。この行で

fac *f = 新しい fac(); jlong​​ 結果 = (jlong​​) (f->factorial(n));

私が望むのは、同じオブジェクト fac を維持することですが、異なる入力で階乗法を利用することです。pthread は複雑すぎるため、避けようとしています。別の Java スレッドを作成し、アプリのプロセス全体を通してこのオブジェクトを維持し、新しいユーザー入力があるたびにその階乗を使用する方法はありますか? 次に、アプリが終了したときにこのオブジェクトを取り除きますか?

要するに、オブジェクト fac の 1 つのインスタンスを保持し、階乗法を何度も使用したいと考えています。ネイティブ pthread を実行しなくても可能ですか? ありがとう

4

1 に答える 1

0

これが私が思いついたものです。

static fac* pfac = NULL;

namespace com_lan_factorial
{
    static jlong factorial(JNIEnv *env, jclass clazz, jlong n)
    {
        pfac = new fac();
        jlong result = (jlong) (pfac->factorial(n));
        return (jlong) result;
    }

    static jlong factorial_ten(JNIEnv *env, jclass clazz)
    {
        jlong result = (jlong) (pfac->factorial(3));
        return (jlong) result;
    }

そのため、pfac というポインターを作成します。最初の実行時に、pfac は新しいオブジェクト pfac = new fac(); に割り当てられます。2 回目の実行では、pfac ポインターを再利用して階乗関数をリコールしました。これは完全に機能しますが、ここで 2 つの階乗メソッドを使用して 2 つの fac オブジェクトを作成するのか、1 つの fac メソッドと同じ階乗メソッドのみを作成するのかはわかりません。誰でも確認できますか。ありがとう

于 2012-11-17T02:44:59.687 に答える