数CreateMutex 用来创建或打开有名或无名的Mutex 对象。如果调用成功,函数返回
创建后对象的句柄。如果同名Mutex 对象在创建之前就已经存在,则函数返回现有的对象的
句柄,并且GetLastError 函数返回ERROR_ALREADY_EXISTS。否则返回创建的Mutex 对
象句柄。如果调用失败,返回空值。它的函数原型如下:
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,
BOOL bInitialOwner,
LPCTSTR lpNcom
);
函数中主要参数的意义如下。
? lpMutexAttributes:指向SECURITY_ATTRIBUTES 结构的指针,决定返回的句柄是否
可以被子进程继承。如果为空,则不能被继承。
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·240·
? bInitialOwner : 指定Mutex 对象的初始拥有者。如果调用者创建Mutex 并且
bInitialOwner 为TRUE,调用线程获得Mutex 对象的拥有权。否则,调用线程不拥有
Mutex 的所有权。
? lpNcom:Mutex 对象的名称。字符串的最大长度为MAX_PATH 个字符。字符串区分
大小写。如果lpNcom 和一个现有的Mutex 对象重名,函数需要对已有的对象有
MUTEX_ALL_ACCESS 的访问权。这种情况下,参数bInitialOwner 被忽略,因为此
时它已经被已有的进程初始化。如果lpMutexAttributes 非空,它决定句柄是否可以被
继承,但是它的安全描述成员被忽略。如果lpNcom 为空,创建的Mutex 对象没有名
称。
(2)OpenMutex
函数OpenMutex 用来打开一个存在的有名称的Mutex 对象。如果调用成功,返回打开的
对象的句柄。反之则返回空值。它的函数原型如下:
HANDLE OpenMutex(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
LPCTSTR lpNcom
);
函数主要参数的意义。
? dwDesiredAccess:指定希望对Mutex 对象进行的访问类型。可以是下面值的组合:
· MUTEX_ALL_ACCESS:可以对Mutex 对象进行所有访问。
· SYNCHRONIZE:允许任何等待函数获得Mutex 对象的所有权。
? bInheritHandle:指定返回的句柄是否可以被继承。
? lpNcom:要打开的Mutex 对象的名称。
(3)ReleaseMutex
函数ReleaseMutex 释放指定的Mutex 对象的所有权。如果调用线程没有Mutex 对象的所
有权,则说明调用失败。它的函数原型如