2012-11-16 17 views
0

我有必須解決以下問題:保持C++對象,利用其方法取決於UI

我有與創建一個對象,並使用該對象的方法本地方法的一個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; 
} 

一切正常,那麼什麼發生的是,用戶界面將養活一個號碼,稱爲C++代碼,並生成一個新的對象調用FAC,以及使用該方法階乘一流的fac。 by this line

fac * f = new fac(); jlong​​ result =(jlong​​)(f-> factorial(n));

我想要的是保持相同的對象fac,但利用不同輸入的因子方法。我試圖遠離pthread,因爲它太複雜了。有沒有一種方法可以創建另一個Java線程,並在整個應用程序的整個過程中保持此對象的活動狀態,並且每當我有新的用戶輸入時使用該因子。那麼當應用程序死亡時擺脫這個對象?

總之,我想保留對象fac的1個實例,並且多次使用因子方法。沒有本地pthread可能嗎? 謝謝

回答

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 =新FAC();在第二次運行時,我只是重新使用pfac指針並調用階乘函數。這完全有效,但我不確定這是否用2階乘方法創建2個fac對象,或者只有1個fac方法和相同的階乘方法。任何人都可以驗證。謝謝

相關問題