(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
LPCTSTR lpNcom
);
函数中主要参数的意义如下。
? dwDesiredAccess:指定如何cāo作对象。
? bInheritHandle:指定返回的句柄是否可以被继承。
? lpNcom:事件对象的名称。
(3)SetEvent,ResetEvent 和PulseEvent
如果需要修改事件句柄的状态,可以使用SetEvent、ResetEvent 和PulseEvent。其中,
SetEvent 将事件句柄的状态改为激活状态,如果自动重置事件处于激活状态,在满足了等待
线程后,它可以被重置。手动重置事件必须调用ResetEvent 函数将事件对象重置为激活状态。
PulseEvent 函数用来向事件句柄发信号,并在所有的等待线程都被释放后,将事件句柄重置
为未激活状态。它们的返回值相同,如果调用成功,返回非0 值,否则返回0。它们的函数
原型如下:
BOOL SetEvent(
HANDLE hEvent
);
BOOL ResetEvent(
HANDLE hEvent
);
BOOL PulseEvent(
HANDLE hEvent
);
函数中主要参数的意义如下。
? hEvent:事件对象的句柄。
如果不再使用句柄,可以调用Win32API 函数CloseHandle 关闭句柄。函数原型如下:
BOOL CloseHandle(
HANDLE hObject
);
枫叶文学网www.fywxw.com
第9 章 多线程
·239·
函数中主要参数的意义如下。
? hObject:对象的句柄。
(4)CEvent
事件(Event)在MFC 中的相应的类是CEvent。CEvent 的构造函数默认创建一个自动重
置的事件,而且处于未激发状态。它的成员函数及其作用如表9-6 所示。
表9-6 CEvent 类的成员函数
函数名称 作用
CEvent 构造函数,构造CEvent 对象
SetEvent 启动事件对象,释放等待线程
PulseEvent 启动事件对象,释放等待线程,或者重置事件
对象为未激活状态
ResetEvent 设置事件对象为未激活状态
Unlock 释放事件对象
4.互斥器(Mutex)
互斥器的功能与临界区相似。区别在于互斥器所花费的时间比临界区多很多,但是互斥
器是核心对象(后面介绍的Event 和Semaphore 也是核心对象),可以跨进程使用,而且等待
一个被锁住的互斥器可以设定TIMEOUT,不会像临界区那样无法得知临界区的情况,一直
等待。
Win32 提供了创建互斥器Create