Symbian线程编程

Symbian线程编程

ID:41033388

大小:89.50 KB

页数:12页

时间:2019-08-14

Symbian线程编程_第1页
Symbian线程编程_第2页
Symbian线程编程_第3页
Symbian线程编程_第4页
Symbian线程编程_第5页
资源描述:

《Symbian线程编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Symbian线程编程虽然symbian操作系统中对多任务的实现更提倡使用活动对象,但多线程也是非常有用的技术,当移植程序、后台大量复杂运算或多媒体编程时,threads都是必不可少的。symbian中的thread编程和一般的多线程编程差不多,下面就来看看具体文档中是如何描述的:SymbianOS的线程和进程在Symbian操作系统中,每个进程都有一个或多个线程。线程是执行的基本单位。一个进程的主线程是在进程启动时生成的。Symbian属于抢占式多任务操作系统,这意味着每个线程都有自己的执行时间,直到系统将CPU使用权给予其他线程。当系统调度时,具有最

2、高优先权的线程将首先获得执行。进程边界是受内存保护的。所有的用户进程都有自己的内存地址空间,同一进程中的所有线程共享这一空间,用户进程不能直接访问其他进程的地址空间。每个线程都有它自己的stack和heap,这里heap可以是私有的,也可以被其他线程共享(另外子线程可以直接用父线程的heap空间,这个可以通过创建线程时调用不同的create函数来实现,至于共享通过堆变量public就可以了)。应用程序框架生成并安装了一个active scheduler,并且为主线程准备了清除栈。如果没有使用框架(如编写exe程序)那就要手动生成这些了。Symbian操作

3、系统专为单线程应用优化,因此强烈推荐使用“活动对象”代替多线程。使用单线程的优点在每个线程都有自己的stack空间时,使用单线程可以减少内存耗费。在线程间切换上下文要比切换活动对象(通过active scheduler)慢得多。不需要处理互斥现象,这减少了程序的负担,简化了代码,减少了错误发生的几率。一些资源只能为主线程所用,因此它们并不是线程安全的,如动态数组。使用多线程的优点有时为了保证所执行的任务的持续性,如播放声音时,我们可以将其归在一个单独的线程中处理。将复杂的多线程或长时间运行程序移植到Symbian上,如果不使用多线程处理,可能会比较难也更

4、耗时间。(题外话:我曾经将一个棋类程序移植到symbian上,里面复杂的递归运算使我不得不使用多线程,这样的情况下,你是很难将时间有序的分化开来,使用活动对象的)线程的基本使用方法RThread提供了线程的各项功能。线程是为内核所拥有的对象,RThread对象封装了这些对象的句柄。生成一个新线程新的线程可以通过构造一个RThread对象,并调用它的Create()函数生成。如:1:TIntthreadFunction(TAny*aPtr)2:{3://pointstoiParameter4:TInt*i=(TInt*)aPtr;5:?_6:}7:8:RT

5、hreadthread;9:thread.Create(KThreadName,threadFunction,4096,10:KMinHeapSize,256*KMinHeapSize,&iParameter);11:thread.Resume();RThread类代表线程,我们可以通过这个类来创建,启动,停止,关闭线程,它还包括其他一些有用的API,大家可以参看文档。要创建线程RThread中一共有3个Create函数,基本大同小异,我们这里就用第一个:TIntCreate(constTDesC&aName,TThreadFunctionaFuncti

6、on,TIntaStackSize,TIntaHeapMinSize,TIntaHeapMaxSize,TAny*aPtr,TOwnerTypeaType=EOwnerProcess);aName:线程的名称aFunction:线程要执行的函数aStackSize:栈的大小,一般都使用KDefaultStackSize(缺省值)aHeapMinSize:堆的最小值aHeapMaxSize:堆的最大值aPtr:aFunction的参数,可以是任意指针aType:缺省值为EOwnerProcess当一个线程被创建后,它处在非活动状态,要启动它需要调用Resu

7、me()函数。线程状态一个线程的最重要的状态为运行、准备、等待和暂停。在生成后,线程首先处于暂停状态,你可以调用Resume()函数来启动它的运行。一个线程也可以通过调用Suspend()来进入中断状态。线程一般通过Kill(TInt aReason)来结束,Terminate()与其相似。如果一个进程的主线程结束,则该进程与所属所有线程都将结束。一种非正常关闭线程的方式就是调用Panic(const TDesC& aCategory, TInt aReason)来中断执行。如何获得中断线程的信息呢,我们可通过ExitType(),ExitReason(

8、)以及ExitCategory()方法来获得。线程可以在中断时发出请求,我们通过

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。