簡體   English   中英

如何使用JNI管理C ++代碼中的靜態變量?

[英]How are the static variables in C++ code managed with JNI?

我的問題是,假設我有一個帶有單例的c ++類,並且我通過JNI方法調用這個單例,每次調用java到c ++時,單例變量因為靜態而改變,還是保持不變? 並且每次我從java調用c ++它在新線程上運行方法還是沒有?

示例代碼:

在Java中:

class NativeLib
{
  public native void updateFrame();
}

在C / C ++中:

JNIEXPORT void JNICALL Java_com_Company_NativeLib_NativeLib_updateFrame()
{
   sceneManager::getInstance()->updateFrame();
}

每次調用時sceneManager :: getInstance()是否返回新實例或最新創建的實例,因為它是一個靜態變量。

我在android我的應用程序崩潰的主要問題,沒有顯示任何類型的logCat信息為什么它崩潰。

但如果我評論了sceneManager :: getInstance() - > updateFrame(); 它永遠不會崩潰,所以我認為當Java調用C ++時,它是在一個新線程中,這意味着靜態變量不會

可以將VM視為應用程序調用的C / C ++代碼庫。 有時它會回調你的代碼。

單身人士不會被重新創建 - 這只是一個方法調用。 Dalvik VM線程只是pthread,無論哪個線程執行來自Java語言代碼的本機調用,都將是執行C ++代碼的線程。

您最好的選擇是附加本機調試器。 FWIW,在logcat中沒有任何東西崩潰的一種方法是使本地遞歸溢出堆棧。 另一種方法是更改​​SIGSEGV / SIGBUS和朋友的信號處理程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM