);
函数中主要参数的意义如下。
·236 ·
…………………………………………………………Page 248……………………………………………………………
第 9 章 多线程
o lpCriticalSection :指向临界区对象的指针。
(4 )LeaveCriticalSection
Win32 API 函数 LeaveCriticalSection 用来释放临界区的所有权,它的函数原型如下:
VOID LeaveCriticalSection(
LPCRITICAL_SECTION lpCriticalSection
);
函数中主要参数的意义如下。
o lpCriticalSection :指向临界区对象的指针。
当速度要求较高,并且进程边界的资源不会被交叉使用的时候,通常采用 Critical Section
替代 Mutexes 。临界区不是一个核心对象,无法获知进入临界区的线程的状态,如果进入临
界区的线程处于死锁状态,没有释放临界资源,系统无法获知,而且没有办法释放该临界资
源。这个缺点在互斥器(Mutex )中得到了弥补。
(5 )CCriticalSection
CcriticalSection 是临界区在 MFC 中的相应的类。它的成员函数如表 9…5 所示。
表 9…5 CEvent 类的成员函数
函数名称 作用
CCriticalSection 构造函数,构造 CCriticalSection 对象
Lock 进入临界区
UnLock 离开临界区
3 .事件(Event )
事件(Event )是由 Windows 操作系统管理的同步对象。可以用于进程或线程的同步。一
个事件被创建后,只有激发状态和未激发状态两种状态,也称为发信号状态和未发信号状态。
事件包括手动重置事件和自动重置事件两种类型。手动重置事件被设置为激发状态后,
会唤醒所有等待的线程,而且一直保持激发状态,直到程序重新把它设置为未激发状态。自
动重置事件被设置为激发状态后,会唤醒一个等待中的线程,然后自动恢复为未激发状态。
所以用自动重置事件来同步两个线程比较理想。
(1)CreateEvent
通过调用 Win32API 函数 CreateEvent 来创建或者打开一个事件对象 。如果调用成功,返
回事件对象的句柄,否则返回空。它的函数原型如下:
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes;
BOOL bManualReset;
BOOL bInitialState;
LPCTSTR lpName
);
函数中主要参数的意义如下。
o lpEventAttributes :指向 SECURITY_ATTRIBUTES 结构的指针,它决定返回的句柄是
否可以被子进程继承。如果 lpEventAttributes 为空,则不能被继承。
·237 ·
…………………………………………………………Page 249……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
o bManualReset :指定创建一个手动重置事件或自动重置事件。如果为前者,必须调用
ResetEvent 手动设定状态为非激活状态。否则,当一个等待线程被释放后,系统会自
动设定对象的状态为非激活状态。
o bInitialState :指定对象的初始状态。
o lpName :事件对象的名称。
(2 )OpenEvent
函数 OpenEvent 可以打开一个存在的事件对象,允许多个进程打开同一个对象。如果调
用成功,返回事件对象的句柄。否则返回空。它的函数原型如下:
HANDLE OpenEvent(
DWORD dwDesiredAccess;
BOOL bInheritHandle;
LPCTSTR lpName
);
函数中主要参数的意义如下。
o dwDesiredAccess :指定如何操作对象。
o bInheritHandle :指定返回的句柄是否可以被继承。
o lpName :事件对象的名称。
(3 )SetEvent,ResetEvent 和 PulseEvent
如果需要修改事件句柄的状态,可以使用 SetEvent、ResetEvent 和 PulseEvent 。其中,
SetEvent 将事件句柄的状态改为激活状态,如果自动重置事件处于激活状态,在满足了等待
线程后,它可以被重置 。手动重置事件必须调用 ResetEvent 函数将事件对象重置为激活状态。
PulseEvent 函数用来向事件句柄发信号,并在所有的等待线程都被释放后,将事件句柄重置
为未激活状态。它们的返回值相同,如果调用成功,返回非 0 值,否则返回 0 。它们的函数
原型如下:
BOOL SetEvent(
HANDLE hEvent
);
BOOL ResetEvent(
HANDLE hEvent
);
BOOL PulseEvent(
HANDLE hEvent
);
函数中主要参数的意义如下。
o hEvent :事件对象的句柄。
如果不再使用句柄,可以调用 Win32API 函数 CloseHandle 关闭句柄。函数原型如下:
BOOL CloseHandle(
HANDLE hObject
);
·238 ·
…………………………………………………………Page 250……………………………………………………………
第 9 章 多线程
函数中主要参数的意义如下。
o hObject :对象的句柄。
(4 )CEvent
事件(Event )在 MFC 中的相应的类是 CEvent 。CEvent 的构造函数默认创建一个自动重
置的事件,而且处于未激发状态。它的成员函数及其作用如表 9…6 所示。
表 9…6 CEvent 类的成员函数
函数名称 作用
CEvent 构造函数,构造 CEvent 对象
SetEvent 启动事件对象,释放等待线程
PulseEvent 启动事件对象,释放等待线程,或者重置事件
对象为未激活状态
ResetEvent 设置事件对象为未激活状态
Unlock 释放事件对象
4 .互斥器(Mutex )
互斥器的功能与临界区相似。区别在于互斥器所花费的时间比临界区多很多,但是互斥
器是核心对象(后面介绍的 Event 和 Semaphore 也是核心对象),可以跨进程使用,而且等待
一个被锁住的互斥器可以设定 TIMEOUT,不会像临界区那样无法得知临界区的情况,一直
等待。
Win32 ?
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 最新章:第37章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 最新章:第31章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 最新章:第214章
- C语言设计
- 作者:谭浩强1 C 语言概述1.1 C语言的发展过程1.2 当代最优秀的程序设计语言1.3 C语言版本1.4 C语言的特点1.5 面向对象的程序设计语言1.6 C和C+1.7 简单的C程序介绍1.8 输入和输出函数1.9 C源程序的结构特点1.10书写程序时应遵循的规则1.11C语言的字符集1.12
- 最新章:第45章
- 设计成婚:不入豪门
- 作者:海未央《设计成婚2:名门新娘》作品介绍《名门新娘》介绍:她是骆家收养的孤女,性格因为受他的影响,变得有些古灵精怪,也懂得是非之分!他说他的一切只为他而努力,可是为什么要拒绝自己呢?什么?没有满十八岁?那今天生日,够十八岁了吧?什么,还太小?太过分了,这不是耍着自己玩吗?嘿嘿,有个邪恶的老师,那
- 最新章:第196章
- 玄学,从入门到放弃
- 《玄学,从入门到放弃》作者:李传言文案:周诣一手拿着卜卦,一手拿着《演员的自我修养,叹息良久。他本是百年前观天占星的玄术师,谁知却一朝重生现代。他只想平淡地生活下去,可天不遂人愿,他注定将在这末法时代掀起波澜!成就一代影帝!谢千仇沉默地看着他…大师,你卦和书都拿倒了#玄学,从入门到放弃,入土,删库跑
- 最新章:第86章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 最新章:第143章
- 要你言听计从
- 作者:决明第一章哈士奇,没有护卫看家的本领,对主人、客人甚至是闯空门的恶人都一样友善,咬着皮球跟小偷一块玩你丢我捡也不用太惊讶,时常被人认为忠诚度不足。贺世祺背靠在冰冷玻璃落地窗前,一整间屋子都是伸手不见五指的黑暗,也好,反正他现在什么也不需要看到,只要耳朵还有听觉就好,顺便听听贴在耳边的手机里还要
- 最新章:第28章