ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [图文]一个简单的 leave Demo(转)

[图文]一个简单的 leave Demo(转)

原创 Linux操作系统 作者:jcszjswkzhou 时间:2019-04-27 13:18:06 0 删除 编辑

以下是程序代码( leave.cpp ),完整程序在这里[下载]

#include
#include
#include

// 定义本地数据
LOCAL_D CConsoleBase* console;
LOCAL_D TInt err;

//定义本地代码
LOCAL_C TInt Ex_1_L(TInt,TInt);
LOCAL_C TInt Ex_2_L(TInt,TInt);
LOCAL_C TInt Ex_3_L(CConsoleBase*);

//全局函数,被 E32 调用的主函数,
GLDEF_C TInt E32Main()
{

// 定义一个 Descriptor,作为Console的标头显示
_LIT(TITLE," Leave 测试 ");
//存放一组二维值,分别表示长和宽
TSize Ts=TSize();
//设置这组值
Ts.SetSize(-1,-1);

//在 e32base.h 中定义了Console 类 ,NewL() 这个类的静态方法。
console=Console::NewL(TITLE,Ts);

TInt i=0;
TKeyCode key;

while(i<1000)
{

//断言处理:按 Esc 键 终止线程并退出
__ASSERT_ALWAYS(key!=27,User::Panic(_L("End Thread"),key));

key=console->Getch();
console->Printf(_L("step[%d]:%c "),i++,key);

// 按 T 键
if (key==116)
{

console->Write(_L("[T]请输入A和B的值: a="));
//从键盘输入
TInt a=console->Getch();
//把输入码转为0-9的数字
a=a-48;
console->Printf(_L("%d"),a);

console->Write(_L(" b="));

TInt b=console->Getch();
b=b-48;
console->Printf(_L("%d "),b);

//使用 Trap 宏设置 code point,
//函数在Trap Harness的保护下运行
TRAP(err,Ex_1_L(a,b));
//输出错误码
console->Printf(_L("err=%d "),err);
//错误处理
if(err==2)
{
console->Write(_L("错误:a不能大于b! "));
err=KErrNone;
}

}


// 按 C 键 清楚屏幕
if (key==99)
{
console->ClearScreen();
}

// 按 S 键
if (key==115)
{

console->Write(_L("[S]请输入A和B的值: a="));
//从键盘输入
TInt a=console->Getch();
//把输入码转为0-9的数字
a=a-48;
console->Printf(_L("%d"),a);

console->Write(_L(" b="));

TInt b=console->Getch();
b=b-48;
console->Printf(_L("%d "),b);

//使用 Trap 宏设置 code point,
//函数在Trap Harness的保护下运行
TRAP(err,Ex_2_L(a,b));
//输出错误码
console->Printf(_L("err=%d "),err);
//错误处理
if(err<0)
{
console->Write(_L("错误:值不可以小于零! "));
err=KErrNone;
}
else
{
console->Write(_L("没有Leave发生! "));
}
}
// 按 D 键
if (key==100)
{

CConsoleBase* cnsx=console;
cnsx->Write(_L("我是cnsx指针 "));

console->Write(_L("是否要取消cnsx 指针?y/n "));
TInt ch=console->Getch();
if(ch==121 || ch==69)
{
cnsx=NULL;
}
else
{
cnsx->Write(_L("我还在那! "));
}
//设置Code Point
TRAP(err, Ex_3_L(cnsx));

console->Printf(_L("err=%d "),err);

if(err<0)
{
console->Write(_L("错误:cnsx指针已经被取消! "));
}
}
}

return 0;
}

TInt Ex_1_L(TInt aNuma,TInt aNumb)
{

console->Printf(_L("Ex_1_L:a=%d,b=%d "),aNuma,aNumb);

//如果 aNuma 的值大于aNumb 的值则leave
if(aNuma>aNumb)
{
console->Printf(_L("%d>%d ,User Leave! "),aNuma,aNumb);
User::Leave(2);
}
return 0;
}

TInt Ex_2_L(TInt aNuma,TInt aNumb)
{

console->Printf(_L("Ex_2_L:a=%d,b=%d "),aNuma,aNumb);
TInt sub;
sub=aNumb-aNuma;
if(sub<0)
{
console->Printf(_L("%d-%d=%d,%d<0,User Leave! "),aNumb,aNuma,sub,sub);
}
//当sub值小于 0 时 leave
User::LeaveIfError(sub);
return 0;
}

TInt Ex_3_L(CConsoleBase* cnx)
{

//当 cnx等于 NULL 时 leave
User::LeaveIfNull(cnx);

return 0;
}

程序运行结果,可以分别按 T 键、D 键、S 键和 C 键(清楚屏幕) 。

这里只有一个 T 键的运行结果。其他运行结果可以自己尝试。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10294527/viewspace-126152/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-08-29

  • 博文量
    3481
  • 访问量
    3018097