《Symbian OS:线程编程》hoolee中文版 二

来源:互联网 发布:sybase数据库启动命令 编辑:程序博客网 时间:2024/06/05 23:47

4、线程优先级
线程可以被赋予一个绝对或相对的优先级。绝对优先级定义了这个线程的总体优先级,不需要考虑其拥有者进程的优先级了。而赋予相对优先级时则将此线称定义为拥有者进程的优先级加上该相对优先级后的结果。

下面粗体标示的优先级值可以由用户代码设置:

Code:

enum TProcessPriority
{
EPriorityLow=150,
EPriorityBackground=250,
EPriorityForeground=350,
EPriorityHigh
=450,
EPriorityWindowServer=650,
EPriorityFileServer=750,
EPriorityRealTimeServer=850,
EPrioritySupervisor=950
};

enum TThreadPriority
{
EPriorityNull=(-30),
EPriorityMuchLess=(-20),
EPriorityLess=(-10),
EPriorityNormal=0,
EPriorityMore=10,
EPriorityMuchMore=20,
EPriorityRealTime=30,
EPriorityAbsoluteVeryLow=100,
EPriorityAbsoluteLow=200,
EPriorityAbsoluteBackground=300,
EPriorityAbsoluteForeground=400,
EPriorityAbsoluteHigh=500

};

上面枚举出来的值中绝对优先级值为:

EPriorityAbsoluteVeryLow, EPriorityAbsoluteLow, EPriorityAbsoluteBackground, EPriorityAbsoluteForeground, EPriorityAbsoluteHigh.

相对优先级值为:

EPriorityMuchLess, EPriorityLess, EPriorityNormal, EPriorityMore, EPriorityMuchMore.

EPriorityNull是一个特殊值,它定义了最低的级别,Kernel idel thread使用的就是它*_*



EPriorityRealTime定义了除核心服务线程优先级外最高的总体优先级。

RThread中的Priority()方法返回了一个线程的优先级(按以上描述值)。我们也可以通过SetPriority(TThreadPrioriy aPriority)方法来修改优先级。

ProcessPriority()方法返回了拥有该线程之进程的优先级(按TProcessPriority描述值)。我们也可以通过SetProcessPriority(TProcessPriority)方法来修改该进程的优先级。



5、异常处理

每个线程都有自己的异常处理模块。当线程发生异常时会调用异常处理模块。异常处理模块的訽型为:

typedef void TExceptionHandler(TExcType);



RThread包含了下列异常处理相关的方法:

TExceptionHandler* ExceptionHandler()

返回该线程当前异常处理模块的地址。



TInt SetExceptionHandler(TExceptionHandler* aHandler, TUint32 aMask);

定义了该线程新的异常处理模块的地址,以及它所处理异常的类别。



void ModifyExceptionMask(TUint32 aClearMask, TUint32 aSetMask)

修改异常处理模块所定之异常类别,aClearMask参数定义了不再为异常处理模块所处理的类别,而aSetMask则定义了新的处理类别。



TInt RaiseException(TExcType aType);

引发线程上指定类型的异常,这时异常处理模块将被启动执行(发生在调用之后)。



TBool IsExceptionHandled(TExcType aType);

检查线程的异常处理模块是否捕捉到aType类型的异常。





(1)异常类别及类型

异常类型是一组针对单个异常的类型识别,主要用在异常发生时。

异常类别则代表一组异常形式。



异常类别的一个集是由一个或多个异常类别通过OR形式组合成的,如KExceptionInteger|KExceptionDebug,这些值用来设置及修改异常处理模块所处理的类别。



下面列示了所有的类型及类别。

异常类别 异常类型

KExceptionInterrupt ->EExcGeneral, EExcUserInterrupt

KExceptionInteger ->EExcIntegerDivideByZero, EExcIntegerOverflow

KExceptionDebug->EExcSingleStep, EExcBreakPoint

KExceptionFault ->EExcBoundsCheck, EExcInvalidOpCode,
EExcDoubleFault, EExcStackFault, EExcAccessViolation,
EExcPrivInstruction, EExcAlignment, EExcPageFault

KExceptionFpe ->EExcFloatDenormal, EExcFloatDivideByZero,
EExcFloatIndexactResult, EExcFloatInvalidOperation, EExcFloatOverflow,
EExcFloatStackCheck, EExcFloatUnderflow

KExceptionAbort ->EExcAbort

KExceptionKill->EExcKill
原创粉丝点击