当前位置: 首页 > article >正文

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");少用。
http://www.lryc.cn/news/2414659.html

相关文章:

  • 目前最受欢迎的12个Python web框架,你用过几个?
  • SqlCommand.ExecuteNonQuery()方法的使用注意
  • Delicatessen音乐名词什么意思
  • Tribon二次开发-COM接口的使用(抽取数据)
  • 全球免费公共 DNS 解析服务器 IP 地址列表推荐 (解决无法上网/加速/防劫持)
  • dubbo和zookeeper
  • Bloom filter 过滤(布隆过滤算法)原理
  • C语言实现集合的基本运算
  • 洛谷4438 [Hnoi2018]道路 【树形dp】
  • 多质量动态系统仿真(Matlab代码实现)
  • 推荐文章:领略东方Project新境界 —— thprac,你的弹幕射击游戏进阶之路
  • 以太坊的单位wei是什么?
  • Winrar通用注册码
  • cellpadding跟cesllspacing区别有什么(table篇)
  • 如何学习数据库
  • CTF比赛总结(小白必看)
  • DWR基本原理及其流程
  • 格兰杰因果分析
  • 文件的简单写入
  • kail-信息收集之DNS解析(dnsenum、dnsrecon、dnswalk)
  • free mobile sex java_Mysql-从原理到优化,深入浅出数据库索引
  • VC2010使用过程常见问题
  • java的编程思想是什么'_编程思想 是什么
  • 栅栏密码(Fence crypto)
  • 监控公司局域网电脑的软件|局域网电脑监控软件哪个好用
  • 61850通讯流程
  • python中dumps、dump、load、loads的区别
  • 安装 USB-Blaster 驱动程序
  • Fire Game (连通块+两点bfs)
  • sobel算子实现原理和c++实现sobel()检测边缘函数