part_c_掌握api和控制点从java到jni接口c07_f_复习问题集_ok_第1页
part_c_掌握api和控制点从java到jni接口c07_f_复习问题集_ok_第2页
part_c_掌握api和控制点从java到jni接口c07_f_复习问题集_ok_第3页
part_c_掌握api和控制点从java到jni接口c07_f_复习问题集_ok_第4页
part_c_掌握api和控制点从java到jni接口c07_f_复习问题集_ok_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C07_f问题集:基於軟硬整合觀點进程、线程和JNI架构(f)By 高煥堂A3.4-JNI 接续上一个题目,基于JNI的EIT造形,让线程在执行插件(就是*.so)时,都能随时透过JNIEnv对象来与(就是 VM)来通信;如下图所示。 请问,在线程执行f1()、f2() 时,透过JNIEnv对象来与 VM来通信,有何目的呢?線程th-x*so()fn()f2()f1()JNIEnv (th-x)VM()相关问题 请问:为什么不直接与VM通信,而要透过JNIEnv对象呢? 请问:JNIEnv对象用来储存什么信息或数据呢?A3.5-JNI 接续上一个题目,不同的线程,会使用不同的JNIEnv对向来

2、与 VM通信;如下述两个图所示。 请问,这样能有效化解多线程的冲突问题吗?線程th-x線程th-yf2()f1()JNIEnv (th-y)JNIEnv (th-x)VM()圖3.5A線程th-x線程th-yf2()f1()JNIEnv (th-y)JNIEnv (th-x)VM()圖3.5B提示 回想,当我们在写Web程序时,都会用到Session对象。 这个Session对象与JNIEnv对象的角色是一致的;两者有异曲同工之妙。 每次浏览器建立完成一个Connection(如同一条线程),都会获得一个专用的Session对象。A3.6-JNI接续上一个题目。有一个线程(th-x)先进入EI

3、T造形去执行f1(),如下图3.6的Step-1所示。做了1+2+3+ + 10的计算,并计算出结果(即sum值) 。然后,th-x就离开f1()返回到Java 层了。随后,线程(th-x)再度进入EIT造形去执行f2()插件, 想取得先前f1()所计算出来的sum值。如下图3.6的Step-2所示。 请问:f1()插件应该将sum值储存在哪里, 才能让f2()顺利拿到sum值呢?線程th-xcall f1()f2()void f1() sum值 =Adder.sum(10) ; .VM()圖3.6: Step-1線程th-xcall f2()void f2() 回傳 sum值;.f1()VM

4、()圖3.6: Step-2提示 由于,同一条线程去执行f1()和f2(), 此时f1()和f2()都能存取同一个JNIEnv对象。 能不能透过*.so的公用变量(GlobalVariable)呢?A3.7-JNI 接续上一个题目。刚才是同一个线程(th-x) 去执行f1()和f2()插件。 如果分别由不同的线程去分别执行f1()和f2() 插件的话,f2()想取得先前f1()所计算出来的sum值。如下图3.7所示。線程th-xcall f1()f2()void f1() sum值 =Adder.sum(10) ; .VM()圖3.7: Step-1線程th-ycall f2()void f2

5、() 回傳 sum值;.f1()VM()圖3.7: Step-2提示 由于,由不同的线程去执行f1()和f2(),此时f1()和f2()使用不同的JNIEnv对象。 能不能透过*.so的公用变量(Global Variable)呢?A3.8-JNI 当 UI线程经由VM而去执行时,如下图所示。 请问:在执行时,UI线程如何去创建一个小线程呢? 如何撰写其代码(创建一个小线程)呢?UI線程call f1()f2()void f1() / 創建一個小線程.VM()相关问题 在里所创建的小线程,VM有给它专属的JNIEnv对象吗? 如果没有的话;请问:如何去向VM索取一个JNIEnv对象呢? 索取J

6、NIEnv对象,有何目的呢?/* com.misoo.counter.CounterNative.cpp */#include #include #include com_misoo_counter_CounterNative.h jmethodID mid;jclass mClass; JavaVM *jvm; pthread_t thread; int n, sum;void* trRun( void* );void JNICALL Java_com_misoo_counter_CounterNative_nativeSetup(JNIEnv *env, jobject thiz) jcl

7、ass clazz = env-GetObjectClass(thiz); mClass = (jclass)env-NewGlobalRef(clazz);mid = env-GetStaticMethodID(mClass, callback, (I)V);void JNICALL Java_com_misoo_counter_CounterNative_nativeExec (JNIEnv *env, jobject thiz, jint numb)n = numb;pthread_create( &thread, NULL, trRun, NULL);void* trRun( void* )int status;JNIEnv *env;bool isAttached = false;status = jvm-GetEnv(void *) &env, JNI_VERSION_1_4); if(status AttachCurrentThread(&env, NULL);if(status 0)return NULL; isAttached = true;sum = 0;f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论