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

推荐订阅源

宝玉的分享
宝玉的分享
NISL@THU
NISL@THU
E
Exploit-DB.com RSS Feed
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
K
Kaspersky official blog
Project Zero
Project Zero
Cisco Talos Blog
Cisco Talos Blog
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
S
Schneier on Security
G
GRAHAM CLULEY
The Hacker News
The Hacker News
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy & Cybersecurity Law Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
T
Tor Project blog
AWS News Blog
AWS News Blog
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
爱范儿
爱范儿
P
Privacy International News Feed
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
S
Securelist
G
Google Developers Blog
The Last Watchdog
The Last Watchdog
Google Online Security Blog
Google Online Security Blog
美团技术团队
F
Fortinet All Blogs
小众软件
小众软件
Recorded Future
Recorded Future
V
Visual Studio Blog
B
Blog RSS Feed
H
Help Net Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
Blog — PlanetScale
Blog — PlanetScale
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
Martin Fowler
Martin Fowler
Latest news
Latest news
Spread Privacy
Spread Privacy
H
Heimdal Security 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 程序中实例的构造看起来很复杂了。