惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
J
Java Code Geeks
L
LangChain Blog
V
V2EX
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
博客园 - Franky
Microsoft Azure Blog
Microsoft Azure Blog
Jina AI
Jina AI
Blog — PlanetScale
Blog — PlanetScale
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
博客园 - 司徒正美
B
Blog
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
Engineering at Meta
Engineering at Meta
MyScale Blog
MyScale Blog
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog

博客园 - 不明飞行物

磨刀不误砍柴工-打造超级Symbian开发环境 Symbian OS 开发初级手册 (8) 多线程 Symbian OS 开发初级手册 (7) Descriptors - 不明飞行物 Symbian OS 开发初级手册 (6) CleanupStack and Two-phase Symbian OS 开发初级手册 (4) mmp, pkg 文件 和 makesis 工具 Symbian OS 开发初级手册 (3)GUI程序中的4个基本类 Symbian OS 开发初级手册 (2)基本数据类型 Symbian OS 开发初级手册 (1) Introduction 利用JavaMail收/发Gmail邮件(SSL) Tapestry4在提交前判断checkbox是否没有一个被选中 - 不明飞行物 - 博客园 恢复windows的引导程序 在页面中插入Windows Media Player播放器 - 不明飞行物 Java中Set的深入研究 - 不明飞行物 - 博客园 Hibernate和Spring的延迟加载和DAO模式 用spring管理hibernate事务时,lzay="true"不能用的解决方法 java中List和Set对象的互换 Tapestry4.0中取得页面request - 不明飞行物 - 博客园 Logout in tapesty4.0 - 不明飞行物 validators里自定义错误信息 - 不明飞行物 - 博客园
Symbian OS 开发初级手册 5 - Leave
不明飞行物 · 2006-05-28 · via 博客园 - 不明飞行物

leave (不知该怎么翻译,就先叫离开吧) 这个词我们在第二课提到过, 知道它是Symbain版本的异常处理。 这一课我们详细讲解它的意义和用法。 首先我们要明白为什么要离开? 当程序运行到一个地方无法正常继续的时候, 比如内存耗尽, 或者当前状态无法进行某个操作的时候我们不能简单的退出程序,或者忽略这些错误。 前者使得界面不够友好, 而后者可能导致不可估计的问题。 所以我们需要在这一点上离开。 让上一层的使用我们这个函数的代码去处理我们遇到的错误。 上一层代码可以根据但是的上下环境决定该如何处理这个错误。
离开的基本用法:
假设我们有一个函数提取一个数组的值:
TInt GetL(TInt aIndex)
{
if(aIndex < 0 || aIndex >= KArraySize)
  {
  User::Leave(KErrArgument);
  }
else
  {
  return iArray[aIndex];
  }
}
要使用这个函数, 我们可以:
TInt x, err;
TRAP(err, x = GetL(5);)
if(err != KErrNone)
{
//输出错误信息等等
}
...首先注意函数名,这是一条规范: 凡是有可能离开的函数,名称都要以L结尾。这包括
在函数实现中使用任何形式的Leave (Leave, LeaveIfNull, LeaveIfError等等)和可leave的函数, 而又没有TRAP掉他们的的函数。以上的GetL函数当aIndex不在合法范围内的时候就会leave, KErrArgument是其原因(错误的参数)。 使用GetL函数的时候我们可以使用TRAP宏来捕捉离开, 所以当GetL 离开的时候, 就会输出错误信息等等。 使用GetL的代码并不一定需要TRAP只要把他自己声明为可离开的函数就可以, 但是要保证终归这些函数要被TRAP掉。 图形界面程序的框架在程序入口处提供了TRAP所以我们可以使用离开而不用TRAP一些普遍性的问题(比如内存不足)。但是文字程序一般需要我们自己提供TRAP. 另外还有一点就是, TRAP这个宏必须在一个CTrapCleanup的实例被创建以后才可以使用。 文字Helloworld中使用了头文件commonframework, 在Examples/basics/commonframework目录下, 我们可以看到:
CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
TRAPD(error,callExampleL()); // more initialization, then do example
//TRAPD是TInt error; TRAP(error,callExampleL()); 的缩写版。
delete cleanup; // destroy clean-up stack
也就是说当你的进程中还没有CTrapCleanup实例的时候, 你需要创建它才可以使用TRAP,当你不再使用TRAP的时候就删除这个实例。有了离开这个基础,我们下一课就可以讲CleanupStack 和 二层构造的概念了。 之后大家就不会觉得Symbian 程序中实例的构造看起来很复杂了。