[英]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.