介绍下c(Brew Platform)语言中的CallBack(回调函数)机制
举Brew的IMedia的例子进行说明,详细如下:
用户程序(用户进程中运行)需要使用Brew系统服务(系统进程中运行)的IMedia接口,
先创建IMedia对象,然后调用IMEDIA_SetMediaParm,这个就不多说了。
然后就可以调用IMEDIA_RegisterNotify接口了,注意,该接口的第二个参数是个指针,用户需要定义该函数,然后把该函数的函数名作为参数。但定义该函数是一定要按照PFNMEDIANOTIFY的格式进行定义,具体可以查看AEEMedia.h文件中第201行。如果没有按照PFNMEDIANOTIFY进行定义,那么编译会有问题。
那么现在已经向IMedia注册CallBack函数了,接下来我们可以调用IMEDIA_PLAY接口进行播放多媒体文件了,在调用该函数后,IMEDIA_PLAY的返回值说明该函数是否调用成功,(因为在IMEDIA_PLAY函数中会有状态判断,这个不细说了)但是为啥还需要我们刚才注册的CallBack呢,原因是:
播放多媒体需要底层硬件的支持, 也就是说,IMEDIA会向硬件发出播放请求,如果硬件状态是允许播放(不允许同),那么IMedia模块就会调用用户注册的CallBack函数进行通知。
回调函数主要是运用在异步通信中。另外需要注意的是回调函数格式是在下层定义的。 |