WEB开发网
开发学院手机开发Symbian 开发 Symbian操作系统中的线程和进程 阅读

Symbian操作系统中的线程和进程

 2010-07-04 15:55:00 来源:WEB开发网   
核心提示:4)使用临界区(Critical Sections)Critical Sections可用来在一单独进程中独占访问共享资源,Critical Sections句柄可以通过RCriticalSection类来获得,Symbian操作系统中的线程和进程(9),Critical Sections只能用在同一进程的线程间,通常

4)使用临界区(Critical Sections)

Critical Sections可用来在一单独进程中独占访问共享资源。Critical Sections句柄可以通过RCriticalSection类来获得。

Critical Sections只能用在同一进程的线程间,通常它用来管理某段代码的访问,每次只能有一个线程来访问。

同一线程中,在调用Wait()前调用Signale()将会引发线程的异常。但不会出现在其他类型的同步对象中。

线程的中断是不会影响critical sections的状态的,因此使用critical sections的线程将不会被其他线程杀死,除非不在critical sections中。当不在需要时,线程的死亡是不会有斑,很安全的。

5)同步实例

Code:

1: class CMessageBuffer

2: ;

12:

13: CMessageBuffer::CMessageBuffer()

14:

17:

18: void CMessageBuffer::AddMessage(const TDes &aMsg)

19:

24:

25: void CMessageBuffer::GetMessages(TDes &aMsgs)

26:

32:

33: static void CMyClass::threadFunction(TAny *aPtr)

34:

45: }

在上面所述中,CMessageBuffer是一个半成品类,它允许用户增加消息到buffer中,也允许获得所有消息。

线程函数CMyClass::threadFunction负责向CMessageBuffer共享对象添加信息,这里内存分配和错误检查并没有列出,需要读者自己完成。

假设有多个线程要共享CMessageBuffer对象实例,则在实际访问buffer时必须要同步来处理。我们也可在线程函数中完成,但在CMessageBuffer中完成同步将使得该类成为线程安全级,同样它也可以被用在单个线程中了。

6总结

很多情况下都需要多线程的,当使用多线程时,同步及互斥排他也要考虑在内,以便保证线程通信的安全性。如果线程使用共享资源,我们应该使用某种同步机制来避免异常的发生,Semaphores, critical sections,和mutexes都提供了基本的解决方案。此外,如果使用活动对象或清除机制,我们还需要手工设置active scheduler和清除栈。总的来说,线程编程不是这么容易的,因为这类编程需要全面理解框架、多任务和线程安全机制。

上一页  4 5 6 7 8 9 

Tags:Symbian 操作系统 线程

编辑录入:coldstar [复制链接] [打 印]
赞助商链接