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

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

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c++并发编程实战 豆瓣_c++11并发编程

    c++并发编程实战 豆瓣_c++11并发编程一个简单的线程程序#include <iostream>#include <thread>using namespace std;void hello(){ std::cout << “Hello Concurrent World\n”;}int main(){ thread t(hello); t.join();}…

    2022年8月18日
  • iOS 数组截取自定义个数

    iOS 数组截取自定义个数_dataArr这里面有20个元素,需求是只要3个for(inti=0;i<3;i++){//先拿3个,循环拿取NSIndexSet*indexset=[NSIndexSetindexSetWithIndexesInRange:NSMakeRange(0,2)];//范围0,1,2个元素if(_dataArr.count>3…

    2022年5月6日
  • Jlink或者stlink用于SWD接口下载程序

    Jlink或者stlink用于SWD接口下载程序最近要使用stm32f103c8t6最小系统板,直接ISP串口下载程序太麻烦,就想着使用swd接口来调试。结果:通过SWD接口下载程序成功,但调试失败,还不知原因,会的的人麻烦交流一下。SWD接口:3.3VDIO(数据)CLK(时钟)GND1.首先声明jlink和stlink都有jtag和swd调试功能。jlink接口如下:如图,我使用的就是VCC…

    2022年4月25日
  • SQL server2019安装教程[通俗易懂]

    下载必备由于安装文件太大,所以没有办法上传,各位就请自行下载安装步骤点击sql2019安装包选择基本浏览安装到指定的位置,点击安装下载下载完成之后就是这个界面,然后点击自定义选择下一步等待扫描完成后选择选择下一步之后再选择第一个“执行SQLSERVER2019的全新安装”,然后点击下一步勾选第一个接受条款,继续下一步在“实例功能”里面勾选你需要…

    2022年4月7日
  • navicate premium 15 激活码【2021免费激活】「建议收藏」

    (navicate premium 15 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlMLZPB5EL5Q-eyJsaWNlbnNlSW…

    2022年3月21日
  • Android【防抖操作的工具类】

    Android【防抖操作的工具类】

    2021年3月12日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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