必威体育Betway必威体育官网
当前位置:首页 > IT技术

CreateMutex创建互斥内核对象

时间:2019-10-10 04:14:27来源:IT技术作者:seo实验室小编阅读:66次「手机版」
 

createmutex

http://blog.sina.com.cn/s/blog_149e9d2ec0102wyr0.html

编程中我们常使用程序创建一个互斥的内核对象,目的就是为了让这个程序只能运行一次。我们都会有这样一个经历,那就是如果我们的打开一个游戏或者其他应用程序,会发现如果想在打开这个游戏,会出现打不开的情况,那是因为使用的是互斥的方式打开。当然我们在编写程序时也是可以写成进程间共享,就想QQ一样可以同时打开多个应用程序。

1.  我们需要一个关键的函数:Createmutex().

这个函数的具体信息大家可以自己百度或查找MSDN。此处我仅仅讲解它的使用。

这个函数有三个参数,特别是第三个参数控制时候可以内存共享。如果你写一个名字比如:

handle hNutex = CreateMutex(NULL, FALSE, L"stf"); //表示创建一个名为stf的互斥内核对象,那么这个程序仅仅在同一台计算机上被允许打开一次。如果再次打开就会出现错误。

HANDLE hNutex = CreateMutex(NULL, FALSE, NULL); //表示创建匿名互斥内核对象,那么这个程序就会被允许多次打开。

我们查看一下相关代码

#include

#include

int _tmain()

{

HANDLE hNutex = CreateMutex(NULL, FALSE, NULL);//创建一个名字叫NULL的互斥内核对象

//匿名内核对象,就是没有名字的内核对象,这种内核对象,不能在进程间共享

//命名内核对象可以在进程间共享

if (ERROR_ALREADY_exists == GetLastError())

{

_tprintf(L"%s\n", L"This is the next instance! and session id is ");

return 0;

}

Dword sessionid = 0;

ProcessIdToSessionId(GetProcessId(NULL), &sessionid);

_tprintf(L"%s\n", L"This is the first instance! and session id is ");

_gettchar();

return 0;

}

HANDLE hNutex = CreateMutex(NULL, FALSE, L"stf"); //创建命名内核对象。

大家可以通过CreateMutex的第三个参数的修改来确定是哪一个值。

2.  创建本地命名对象和全局命名对象

其实这个还是很简单的如果要创建本地内核对象,只需要在命名对象名字前面加一个local就行了。如果需要创建全局对象,那么只需要在命名对象前面加一个Global就可。分别如下:

HANDLE hNutex = CreateMutex(NULL, FALSE, L"Local\\stf");  //创建本地内核对象

HANDLE hNutex = CreateMutex(NULL, FALSE, L"Global\\stf");  //创建全局内核对象

但是需要注意的是Session不要轻易使用。即HANDLE hNutex = CreateMutex(NULL, FALSE, L"Session\\stf");少用。

相关阅读

CreateMutex、WaitForSingleObject、ReleaseMutex——

CreateMutexCreateMutex作用是找出当前系统是否已经存在指定进程的实例。如果没有则创建一个互斥体。互斥对象是系统内核维护的一

分享到:

栏目导航

推荐阅读

热门阅读