zoukankan      html  css  js  c++  java
  • CreateMutex() 、ReleaseMutex()

    功能

    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 }
  • 相关阅读:
    ASP.NET MVC 3 Performance – on par with MVC 2
    delete obj$
    什么是软件架构设计
    MySQL 5.7版本安装教程-踩坑总结
    Linux操作系统Centos7.2版本搭建Apache+PHP+Mysql环境
    如何给DropDownList控件设置样式(ASP.NET MVC)
    小白如何写需求文档
    List和string之间的互相转换
    五线谱知识
    js字符串与字符数组之间的转换
  • 原文地址:https://www.cnblogs.com/SnailProgramer/p/4235310.html
Copyright © 2011-2022 走看看