<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                NIEnv是一個和線程相關的,代表JNI環境的結構體,圖2-3展示了JNIEnv的內部結構: :-: ![](http://img.blog.csdn.net/20150802093747105?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 圖2-3 JNIEnv內部結構簡圖 從上圖可知,JNIEnv實際上就是提供了一些JNI系統函數。通過這些函數可以做到: - 調用Java的函數。 - 操作jobject對象等很多事情。 后面小節中將具體介紹怎么使用JNIEnv中的函數。這里,先介紹一個關于JNIEnv的重要知識點。 上面提到說JNIEnv,是一個和線程有關的變量。也就是說,線程A有一個JNIEnv,線程B有一個JNIEnv。由于線程相關,所以不能在線程B中使用線程A的JNIEnv結構體。讀者可能會問,JNIEnv不都是native函數轉換成JNI層函數后由虛擬機傳進來的嗎?使用傳進來的這個JNIEnv總不會錯吧?是的,在這種情況下使用當然不會出錯。不過當后臺線程收到一個網絡消息,而又需要由Native層函數主動回調Java層函數時,JNIEnv是從何而來呢?根據前面的介紹可知,我們不能保存另外一個線程的JNIEnv結構體,然后把它放到后臺線程中來用。這該如何是好? 還記得前面介紹的那個JNI_OnLoad函數嗎?它的第一個參數是JavaVM,它是虛擬機在JNI層的代表,代碼如下所示: ~~~ //全進程只有一個JavaVM對象,所以可以保存,任何地方使用都沒有問題。 jint JNI_OnLoad(JavaVM* vm, void* reserved) ~~~ 正如上面代碼所說,不論進程中有多少個線程,JavaVM卻是獨此一份,所以在任何地方都可以使用它。那么,JavaVM和JNIEnv又有什么關系呢?答案如下: - 調用JavaVM的AttachCurrentThread函數,就可得到這個線程的JNIEnv結構體。這樣就可以在后臺線程中回調Java函數了。 - 另外,后臺線程退出前,需要調用JavaVM的DetachCurrentThread函數來釋放對應的資源。 再來看JNIEnv的作用。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看