CreateMutex() 、ReleaseMutex()

CreateMutex() 、ReleaseMutex()功能:CreateMutex()用于有独占要求的程序(在其进程运行期间不允许其他使用此端口设备的程序运行,或不允许同名程序运行)。比如运行金山词霸时,一次只能运行一个实例,当运行第二个实例时,实际上是激活第一个实例,将其带到最顶层。原型:1HANDLECreateMutex(2LPSECURITY_ATTRIBUTESlpMutexAttribut…

大家好,又见面了,我是你们的朋友全栈君。

功能

CreateMutex() 用于有独占要求的程序 (在其进程运行期间不允许其他使用此端口设备的程序运行,或不允许同名程序运行)。

比如运行金山词霸时,一次只能运行一个实例,当运行第二个实例时,实际上是激活第一个实例,将其带到最顶层。

原型

1 HANDLE CreateMutex(   
2     LPSECURITY_ATTRIBUTES lpMutexAttributes, 
3     BOOL bInitialOwner,  
4     LPCTSTR lpName 
5 );

参数

lpMutexAttributes:必须为NULL

bInitialOwner:如果为TRUE,调用互斥对象的线程获得互斥对象的所有权

         如果为FALSE,则不拥有

lpName:如果lpName跟一个已存在的事件、信号、文件映射对象匹配,即命名的互斥对象已存在,则CreateMutex函数失败,GetLastError()返回ERROR_INVALID_HANDLE。

注解

一旦不再需要,注意必须用CloseHandle函数将互斥体句柄关闭。从属于它的所有句柄都被关闭后,就会删除对象。
进程中止前,一定要释放互斥体(ReleaseMutex(HANDLE)),如不慎
采取这个措施,就会将这个互斥体标记为废弃,并自动释放所有权。共享这个互斥体的其他
应用程序也许仍然能够用它,但会接收到一个废弃状态信息,指出上一个所有进程未能正常关闭。

代码

 1 BOOL CBBBApp::SetMutex()  2 {  3 BOOL bFound = FALSE;  4  5 HANDLE hMutexOneInstance = ::CreateMutex(NULL, TRUE, _T("MutexBBB"));  6  7 if (::GetLastError() == ERROR_ALREADY_EXISTS)  8  {  9 TRACE(_T("Instance对象已存在")); 10 11 bFound = TRUE; 12  CloseHandle(hMutexOneInstance); 13 hMutexOneInstance = NULL; 14  } 15 16 if (hMutexOneInstance) 17  { 18  ::ReleaseMutex(hMutexOneInstance); 19  } 20 21 if (bFound) 22  { 23 return FALSE; 24  } 25 26 return TRUE; 27 }

转载于:https://www.cnblogs.com/SnailProgramer/p/4235310.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/153180.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 自动驾驶(四十七)———超声波雷达简介「建议收藏」

    自动驾驶(四十七)———超声波雷达简介「建议收藏」超声波雷达听着很陌生,但其实一直被广泛使用在倒车上,与毫米波雷达不同的是:超声波能被任何材质的障碍物反射,毫米波只能被金属物体反射,超声波雷达的探测距离又很近,到底工作原理是什么,下面我带大家一起来来看看。1.工作原理超声波雷达的工作原理是通过超声波发射装置向外发出超声波,到通过接收器接收到发送过来超声波时的时间差来测算距离。常用探头的工作频率有40kHz,…

  • delphi vcl_delphi数据类型

    delphi vcl_delphi数据类型[+]窗体和应用程序类表示Form和Application对象,这些类是从TComponent派生而来,它们实际也是组件,单独地把它列举出来,以示与拖到窗体上的控件加以区别。1、TApplication类TApplication类封装了Windows程序的基本操作。TApplication所担负的任务有:管理图标、提供快捷帮助和基本消息处理。每个Delphi应用程序都

  • android 混淆规则作用,Android代码混淆详解

    android 混淆规则作用,Android代码混淆详解一、混淆的意义混淆代码并不是让代码无法被反编译,而是将代码中的类、方法、变量等信息进行重命名,把它们改成一些毫无意义的名字,同时也可以移除未被使用的类、方法、变量等。所以直观的看,通过混淆可以提高程序的安全性,增加逆向工程的难度,同时也有效缩减了apk的体积。总结如下:1、将项目中的类、方法、变量等信息进行重命名,变成一些无意义的简短名字。2、移除未被使用的类、方法、变量等。二、混淆的规则和配置…

  • navigator.appName检测浏览器

    navigator.appName检测浏览器functiondectionBrower(){varbrowerName=navigator.appName;alert(browerName);}//谷歌浏览器显示Netscape//火狐浏览器显示Netscape经测试我发现Chrome,Firefox,Safari,opera,就连IE浏览器用navigator.appName检测都是Netscape…

  • 2018/12/2 今日思想关于复杂度

    2018/12/2 今日思想关于复杂度

  • git 分支管理 推送本地分支到远程分支等

    git 分支管理 推送本地分支到远程分支等

    2021年10月23日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号