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 }
  • 相关阅读:
    什么是结构化数据?什么是半结构化数据?
    安卓图表引擎AChartEngine(一)
    Android中通过pid获取app包名
    Android USER 版本与ENG 版本的差异--MTK官方解释
    Android 各层中日志打印功能的应用
    Android音频系统之AudioFlinger(二)
    Android音频系统之AudioFlinger(一)
    Android音频系统之音频框架
    第1章 音频系统
    Android音频系统之AudioPolicyService
  • 原文地址:https://www.cnblogs.com/SnailProgramer/p/4235310.html
Copyright © 2011-2022 走看看