windows ce 进程、线程和内存管理(二)

windows ce 进程、线程和内存管理(二)

ID:9497321

大小:58.00 KB

页数:7页

时间:2018-05-01

windows ce 进程、线程和内存管理(二)_第1页
windows ce 进程、线程和内存管理(二)_第2页
windows ce 进程、线程和内存管理(二)_第3页
windows ce 进程、线程和内存管理(二)_第4页
windows ce 进程、线程和内存管理(二)_第5页
资源描述:

《windows ce 进程、线程和内存管理(二)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、WindowsCE进程、线程和内存管理(二)  二、同步  在多数情况下,线程之间难免要相互通信、相互协调才能完成任务。比如,当有多个线程共同访问同一个资源时,就必须保证一个线程正读取这个资源数据的时候,其它线程不能够修改它。这就需要线程之间相互通信,了解对方的行为。再有当一个线程要准备执行下一个任务之前,它必须等待另一个线程终止才能运行,这也需要彼此相互通信。实际开发过程中,线程间需要同步的情况非常多。FC也对临界区函数进行了封装。临界区相关函数:void InitializeCriticalSection(LPCRITICAL_SEC

2、TION);void EnterCriticalSection(LPCRITICAL_SECTION);void LeaveCriticalSection(LPCRITICAL_SECTION);void DeleteCriticalSection(LPCRITICAL_SECTION);   举例如下:voidCriticalSectionExample(void){  CRITICAL_SECTION csMyCriticalSection;  InitializeCriticalSection(csMyCriticalSection

3、); ///初始化临界区变量  __try  {   EnterCriticalSection(csMyCriticalSection); ///开始保护机制   ///此处编写代码  }  __finally ///异常处理,无论是否异常都执行此段代码  {   LeaveCriticalSection(csMyCriticalSection); ///撤销保护机制  }}MFC类使用更简单:CCriticalSection cs;cs.Lock();///编写代码cs.Unlock();     使用临界区要注意的是避免死锁。当有两个

4、线程,每个线程都有临界区,而且临界区保护的资源有相同的时候,这时就要在编写代码时多加考虑。  3、事件对象  事件对象运行在内核模式。与用户模式不同,内核模式下线程利用等待函数来等待所需要的事件、信号,这个等待过程由操作系统内核来完成,而线程处于睡眠状态,当接收到信号后,内核恢复线程的运行。内核模式的优点是线程在等待过程中并不浪费CPU时间,缺点是从用户模式切换到内核模式需要一定的时间,而且还要切换回来。在讲解事件对象前应该先谈谈等待函数。等待函数有四个。具体参数和功能见下表:  函数参数和功能ultipleObjects参数1为Dsgu

5、ltipleObjects参数1为DultipleObjects函数相似,只是多了一个唤醒掩码。唤醒掩码都是和消息有关的。此函数不但能够为事件等待,还能为特定的消息等待。其实这个函数就是专为等待消息而定义的。MsgultipleObjectsEx参数1为DsgultipleObjects函数的扩展。将原来函数的参数3除掉,添加参数5为标志。标志有两个值:0或MO_INPUTAVAILABLE。  如果一个线程既要执行大量任务同时又要响应用户的按键消息,这两个专用于等待消息的函数将非常有用。  和事件有关的函数有:HANDLE Create

6、Event(LPSECURITY_ATTRIBUTES lpEventAttributes,          BOOLbManualReset,          BOOL bInitialState,          LPTSTR lpName);BOOL SetEvent(HANDLE hEvent);BOOL PulseEvent(HANDLE hEvent);BOOL ResetEvent(HANDLE hEvent);HANDLE OpenEvent(Dutex(LPSECURITY_ATTRIBUTES lpMutexAt

7、tributes,         BOOL bInitialOe);BOOL ReleaseMutex(HANDLE hMutex);     互斥对象包含一个引用计数,一个线程ID和一个递归计数。引用计数是所有内核对象都含有的。线程ID表示哪个线程正在使用互斥资源,当ID为0时,互斥对象发出信号。递归计数用于一个线程多次等待同一个互斥对象。函数CreateMutex创建一个互斥对象,参数1必须设置为NULL,参数2如果设置为FALSE,表示当前线程并不占有互斥资源,互斥对象的线程ID和递归计数都被设置为0,互斥对象处于有信号状态。如果

8、设置为TRUE,表示当前线程将占有互斥资源,互斥对象的线程ID被设置为当前线程ID,递归计数被设置为1,互斥对象处于无信号状态。当调用等待函数时,等待函数检验互斥对象的线程ID是否为0,如果为

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

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

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