使用命名对象

【勇芳软件工作室】汉化HomePreviousNext

以下示例说明通过创建和打开命名对象来使用对象名称。

互斥

第一个进程使用CreateMutex函数创建互斥对象。请注意,即使存在具有相同名称的现有对象,该函数也会成功。

//一个进程创建互斥对象。

HANDLE hMutex;

DWORD dwErr;

hMutex = CreateMutex(

NULL, //没有安全描述符

FALSE, //互斥体不拥有

"NameOfMutexObject"); //对象名称

if (hMutex == NULL)

printf("CreateMutex error: %d\n", GetLastError() );

其他

if ( GetLastError() == ERROR_ALREADY_EXISTS )

printf("CreateMutex opened existing mutex\n");

其他

printf("CreateMutex created new mutex\n");

第二个过程使用OpenMutex函数来打开现有互斥体的句柄。如果具有指定名称的互斥对象不存在,则此函数将失败。访问参数请求完全访问互斥体对象,这是在任何等待功能中使用的句柄所必需的。

//另一个进程打开现有互斥体的句柄。

HANDLE hMutex;

hMutex = OpenMutex(

MUTEX_ALL_ACCESS, //请求完全访问

FALSE, // Create or open a named semaphore.

"NameOfMutexObject"); //对象名称

if (hMutex == NULL)

printf("OpenMutex error: %d\n", GetLastError() );

信号

以下示例使用CreateSemaphore函数来说明如果对象已存在,则命名对象创建操作失败。

HANDLE CreateNewSemaphore(LPSECURITY_ATTRIBUTES lpsa,

LONG cInitial,龙的Cmax,LPTSTR lpszName)

{

HANDLE hSem;

//创建或打开一个命名的信号量。

hSem = CreateSemaphore(

lpsa, //安全属性

cInitial, //初始计数

cMax, //最大计数

lpszName); //信号量名称

//关闭句柄,如果现在的信号量打开,则返回NULL。

if (hSem != NULL && GetLastError() == ERROR_ALREADY_EXISTS)

{

CloseHandle(hSem);

return NULL;

}

//如果创建了新的信号量,则返回句柄。

return hSem;

}