介绍下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函数进行通知。
回调函数主要是运用在异步通信中。另外需要注意的是回调函数格式是在下层定义的。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BREW协作式多任务特性,是通过C/C++的回调函数机制来实现的。其实所谓的回调函数是由系统调用用户的函数,由系统回调的函数,而非用户自行调用,这样用户就可以以根据需要动态改变系统的功能,但是要求用户设计的函数必须遵循系统的函数声明。而从技术上讲的所谓回调函数,其实就是函数指针,可以达到运行时动态调用函数的作用。
BREW中的回调函数除了使用在事件处理之外,定时器、复杂的数据加密算法和网络数据发送与接收等都使用回调函数技术,回调函数在基于事件处理的系统中还可以避免使用轮询技术导致应用程序陷入长时间的循环等待中。当把需要等待的事件或者是处理的任务作为回调函数注册到系统中,这样当系统接受到指定的消息或者是当系统处理完当前的任务,将会调用已经注册的回调函数。
在
BREW程序设计中,特别需要避免的是长时间的单一函数或者方法执行,或者是使用如下的技术:
while(1)
{
DoSomeThing();
}
这种技术在游戏设计中是经常采用的,一旦进入游戏,将进入用户自己的循环,只从系统得到需要的数据。但是在
BREW中,一旦陷入这种无限循环而无法及时响应系统消息,将会导致手持设备的强制性重新启动。
因此在
BREW中需要进行的周期性工作,一般是使用定时器来执行的,在设置定时器的时候,一般会同时初始化一个回调函数,这样在定时器结束后会调用这一个回调函数。
回调函数在
BREW中的另外一个作用就是对于复杂任务的分解执行,对于十分复杂的任务或者功能,可能执行时间较长,由于这将导致设备的重新启动,因此必须修改算法,把复杂算法分步执行,没有执行完的程序也需要立刻返回,并且把没有完成的工作注册为回调函数,等下次执行调用。
因此
BREW的协作式多任务由此可以产生,由于把复杂任务进行了分解,导致每次只执行一部分,并且各个任务都可以得到执行的机会,因此可以产生模拟的多任务效果。但是这里的多任务是协作的,需要由用户在程序设计中进行保证,必须及时出让占用的系统资源,这个是协作式与抢先式多任务的明显区别,虽然这样增加了用户进行程序设计的难度,但是却最大限度的节约了系统资源,最大限度地增加了系统的执行和运行效率。因此在嵌入式程序设计以及
BREW中被广泛采用。
分享到:
相关推荐
回调函数在C语言中是一种非常重要的编程机制,它允许我们将一个函数的地址作为参数传递给另一个函数,由这个函数在适当的时候调用我们传入的函数。这种模式在处理异步事件、信号处理、排序算法以及其他需要在特定...
#### 二、BREW中的回调函数应用 BREW(Binary Runtime Environment for Wireless)是一个由高通公司开发的操作环境,主要用于移动设备上的应用程序开发。BREW采用了基于事件的协作式多任务机制,这意味着多个应用...
在BREW中,`ISHELL_Resume`函数是回调机制的重要组成部分,它允许向AEE外壳注册回调,将回调函数添加到待处理操作列表中。当事件循环运行时,这些回调函数会被调用,以实现多任务协同处理。如果回调已经注册过,`...
`Brew 3.0`是Homebrew的最新版本,它带来了一些重要的改进和新特性。首先,我们来看API接口,API(Application Programming Interface)是软件之间交互的约定,允许开发者通过调用特定的函数或方法来实现某些功能。...
当事件发生时,BREW会调用相应的回调函数,实现异步处理。 7. **模块化编程**:BREW鼓励使用库来组织代码,每个库可以包含一组相关的函数和数据结构。这样可以提高代码重用性和模块化程度。 在进行BREW开发时,...
2. 软件基础:本章主要讲解C语言,这是BREW开发的基础语言。通过个人的解释方式,帮助读者理解C语言的细节,为后续的BREW编程打下基础。 3. 编译器基础:编译器是将源代码转换为可执行文件的关键工具。这一章会讨论...
描述中的“有回调函数,显示时间==”这部分,涉及到编程中的概念。回调函数是在特定事件发生时被调用的函数,例如在MP3播放时,可能有一个回调函数用于更新播放进度,显示已播放的时间。这里的“显示时间==”可能是...
当特定事件发生时,如用户交互、网络活动或定时器触发,相应的回调函数会被调用执行。这种机制允许程序高效地利用系统资源,减少不必要的CPU占用,并且能够灵活地响应用户行为和系统状态变化。 BREW模块概念是指在...
这个压缩包文件包含了关于BREW的实用资料,对于理解和开发BREW应用程序有着重要的价值。 首先,我们来深入探讨一下BREW平台的核心特性。BREW提供了一个强大的二进制运行时环境,它允许开发者编写高效的C++代码,以...
在BREW中,回调函数是实现异步操作和事件处理的关键。 8. **BREW SDK入门**: SDK包含了开发BREW应用所需的所有工具、库和文档。学习如何配置和使用SDK,以及如何构建和调试应用程序,是成为BREW开发者的起点。 ...
此外,书中还会涵盖一些高级话题,如调试brew问题、贡献修复到开源社区、以及如何利用brew进行自动化部署。这些内容将帮助读者不仅成为一名熟练的brew用户,还能成为积极参与社区的开发者。 在实际案例部分,书中将...
书中的剖析部分会讲解BREW如何与设备的硬件进行交互,如何通过驱动程序访问设备功能,如传感器、摄像头、蓝牙等。同时,还会探讨BREW如何管理操作系统的资源,如进程调度、内存分配等。 4. BREW API和库的使用: ...
本教程集合了关于BREW平台上的uiOne和TrigML的全面知识,旨在帮助开发者深入理解和掌握这两个关键组件。 uiOne是BREW平台上的一款用户界面开发框架,它提供了一种高效的方式来构建具有丰富图形和交互性的UI。uiOne...
在"压缩包子文件的文件名称列表"中,提及的"BREW高阶技术培训资料及code"可能包含实际的代码示例和更深入的技术讲解,这将有助于加深对BREW平台的理解。你可以通过这些资料学习如何将理论知识应用于实践,解决具体...
这个“Brew指南”将深入讲解如何利用Brew来优化你的开发环境。 一、Brew基本概念与安装 1. 安装Brew:在Mac上,你可以通过在终端输入以下命令来安装Brew: ``` /bin/bash -c "$(curl -fsSL ...
在BREW游戏开发中,以下是一些关键知识点: 1. **BREW API**:了解并熟练使用BREW提供的API是开发的基础,这些API涵盖了用户界面、网络通信、多媒体、设备访问等多个方面。 2. **事件驱动编程**:BREW采用事件驱动...
在本文中,我们将深入探讨Brew绿色安装3.01的过程及其对环境配置的要求。 首先,"绿色安装"通常指的是不需要系统注册表修改或写入硬盘的便携式安装方式。这种安装方式使得BrewSDK可以在不干扰操作系统其他部分的...
标题中的“25个brew应用源码”指的是25个基于BREW(Binary Runtime Environment for Wireless)平台的应用程序源代码。BREW是由高通公司开发的一种面向无线设备的操作系统和应用开发环境,主要用于早期的智能手机和...