*线程
- 线程是多任务的基础,允许多个代码序列同时执行
- 在Symbian操作系统中,可以同时创建多个线程,但是会带来管理复杂和巨大的系统开销
- 在Symbian操作系统中,操作线程的类是RThread,其对象表示一个线程的句柄
- RThread的基类是RHandleBase,它封闭了通用句柄的行为,用于表示Symbian操作系统中对象的句柄
*创建和启动线程
TInt Create(const TDesC& aName, THreadFunction aFunction, TInt aStackSize, RHeap* aHeap, TAny* aPtr, TOwnerType aType = EOWnerProcess)
TInt threadFunc(TAny*)
{
for (TInt i=0; i<10; i++)
{
User::InfoPrint(_L("Thread"));
User::After(1000000);
}
return 0;
}
void StartThreadL()
{
RThread thd;
User::LeaveIfError(thd.Create(_L("MyThread"),threadFunc,KDefalutStactSize,NULL,NULL);
thd.Resume();//线程创建后是挂起状态,这一步是启动线程
}
*打开已经存在的线程
RThread thd;
TInt rc = thd.Open(_L("MyThread"));
if (rc != KErrNone)
{
}
if (thd.EXitType() == EExitPending)//如果进程已经存在并且还在运行
thd.Suspend();//挂起进程,既等待进程运行完毕
……
thd.Resume(); //继续线程执行
*线程的优先级(均是相对所在进程的优先级而言)
- EPriorityNull(-30)
- EPriorityMuchLess(-20)
- EPriorityLess(-10)
- EPriorityNormal(0)
- EPriorityMore(+10)
- EPriorityMuchMore(+20)
- EPriorityRealTime(+30)
*终止线程
- 可以使用RThread::Kill(TInt aReason)来终止线程
- RThread提供ExitType()和ExitReason()来返回线程终止的原因
- ExitType()返回值包括
·EExitKill: 线程函数返回或显示调用Kill()函数
·EExutPanic:线程因为严重错误而结束
·EExitPending:线程仍在运行
- ExitReason()返回值包括
·返回代码:线程函数正常返回
·终结代码:线程调用Kill()函数
·错误代码:线程因为严重错误而退出
·零:线程仍在运行