多线程以及生产者和消费者模型_第1页
多线程以及生产者和消费者模型_第2页
多线程以及生产者和消费者模型_第3页
多线程以及生产者和消费者模型_第4页
多线程以及生产者和消费者模型_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

FFmpeg打造Android万能音频播放器杨万里Android工程师

CSDN博客:邮箱:AndroidC++多线程2、创建子线程3、生产者和消费者模型4、C++全局调用Java方法1、AndroidC++线程简介AndroidC++线程简介

我们都知道Android是基于Linux内核的,而Linux是遵循POSIX线程标准的,POSIX线程库中有一系列PthreadsAPI方便我们对Linux线程的操作。所以我们在Android中使用C/C++线程也就转到了使用POSIX线程库。他们都在头文件“pthread.h”中。创建子线程1、pthread_t:用于声明一个线程对象如:pthread_t

thread;

2、pthread_creat

:用于创建一个实际的线程如:pthread_create(&pthread,NULL,threadCallBack,NULL);其总共接收4个参数,第一个参数为pthread_t对象,第二个参数为线程的一些属性我们一般传NULL就行,第三个参数为线程执行的函数(

void*

threadCallBack(void

*data)

),第四个参数是传递给线程的参数是void*类型的既可以传任意类型。3、pthread_exit:用于退出线程如:pthread_exit(&thread),参数也可以传NULL。注:线程回调函数最后必须调用此方法,不然APP会退出(挂掉)。

生产者和消费者模型1、pthread_mutex_t

:用于创建线程锁对象如:pthread_mutex_t

mutex;

2、pthread_mutex_init

:用于初始化pthread_mutex_t锁对象如:pthread_mutex_init(&mutex,

NULL);

3、pthread_mutex_destroy

:用于销毁pthread_mutex_t锁对象如:pthread_mutex_destroy(&mutex);

4、pthread_cond_t

:用于创建线程条件对象如:pthread_cond_t

cond;

5、pthread_cond_init

:用于初始化pthread_cond_t条件对象如:pthread_cond_init(&cond,

NULL);

6、pthread_cond_destroy

:用于销毁pthread_cond_t条件对象如:pthread_cond_destroy(&cond);

7、pthread_mutex_lock

:用于上锁mutex,本线程上锁后的其他变量是不能被别的线程操作的如:pthread_mutex_lock(&mutex);

8、pthread_mutex_unlock

:用于解锁mutex,解锁后的其他变量可以被其他线程操作如:pthread_mutex_unlock(&mutex);

9、pthread_cond_signal

:用于发出条件信号如:pthread_cond_signal(&mutex,

&cond);

10、pthread_cond_wait

:用于线程阻塞等待,直到pthread_cond_signal发出条件信号后才执行退出线程阻塞执行后面的操作。

C++全局调用Java方法1、C++主线程调用Java方法2、C++子线程调用Java方法C++主线程调用Java方法1、根据jobject获取jclass(静态方法就不用这一步了)如:jclass

clz

=

env->GetObjectClass(jobj);2、获取jmethodid如:jmethodidjmid

=

env->GetMethodID(clz,

"onError",

"(ILjava/lang/String;)V")3、调用方法如:jenv->CallVoidMethod(jobj,

jmid,

code,

jmsg)

C++子线程调用Java方法由于JniEnv是线程相关的,所以子线程中不能使用创建线程的JniEnv;而JVM是进程相关的,所以可以通过JVM来获取当前线程的JniEnv,然后就可以调用Java的方法了。1、获取JVM对象:JNI_OnLoad(JavaVM*

vm,void*

reserved)2、通过JVM获取JniEnv:JNIEnv

*env;

jvm->AttachCurrentThread(&env,

0);/* callJavaMethoid*/

jvm->DetachCurrentThread();THANKSCSDN网站:企业服务:人才服务:CTO俱乐部:高校俱乐部:程序员杂志:CODE平台:项目外包:

温馨提示

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

评论

0/150

提交评论