功能

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

CreateMutex() 、ReleaseMutex()相关推荐

  1. windows线程 互斥锁CreateMutex、ReleaseMutex、CloseHandle

    互斥 相关问题 多线程下代码或资源的共享使用. 互斥的使用 1.创建互斥 HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes,//安 ...

  2. CreateMutex、WaitForSingleObject、ReleaseMutex——创建互斥对象

    CreateMutex CreateMutex作用是找出当前系统是否已经存在指定进程的实例.如果没有则创建一个互斥体. 互斥对象是系统内核维护的一种数据结构,它保证了对象对单个线程的访问权 互斥对象的 ...

  3. CreateMutex、WaitForSingleObject、ReleaseMutex

    我们对线程做一些简单的同步处理,这里我们用互斥量(Mutex). 互斥量(Mutex)和二元信号量类似,资源仅允许一个线程访问.与二元信号量不同的是,信号量在整个系统中可以被任意线程获取和释放,也就是 ...

  4. CreateMutex WaitForSingleObject ReleaseMutex使用

    HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes,// BOOL bInitialOwner,  // flag for init ...

  5. 事件EVENT与waitforsingleobject的使用以及Mutex与Event的区别

    Mutex与Event控制互斥事件的使用详解最近写一程序,误用了Mutex的功能,错把Mutex当Event用了.[Mutex]使用Mutex的主要函数:CreateMutex.ReleaseMute ...

  6. VC++ MFC 多线程及线程同步(详细、全面总结!)

    更多详情:http://blog.csdn.net/whyacinth/ VC++ MFC 多线程及线程同步 关键词: MFC    多线程及线程同步                          ...

  7. MFC 多线程及线程同步

    一.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消息机制,通常 ...

  8. MFC第三节-多线程

    一.程序,进程,线程 程序是指令的集合,以文件形式储存在磁盘上.一个程序可以对应多个进程,一个进程代表一个实例. 进程由管理进程的内核对象.地址空间组成.内核对象存放关于进程的统计信息,地址空间包含可 ...

  9. (转载博文)VC++API速查

    窗口处理 2.1 窗口简介 2.2.1 创建普通窗口(CreateWindow.CreateWindowEx) 2.2.2 关闭窗口(CloseWindow) 2.2.3 销毁窗口(DestroyWi ...

最新文章

  1. IDEA 中 30 秒生成 Spring Cloud Alibaba 工程
  2. clion opencv安装_Clion+Opencv3.2终极配置教程
  3. Elastic:为 Elasticsearch 启动 https 访问使数据访问更安全
  4. 按之字形顺序打印二叉树
  5. Spring学习(八)AOP详解
  6. 锐捷网费和锐捷网络缴费_教育信息化领域多位专家出席锐捷“三个课堂”应用展示研讨会...
  7. [XML-Jsoup]Jsoup_解析_快速入门
  8. (pytorch-深度学习)深度循环神经网络
  9. java 重写session_使用Shiro重写Session 自定义SESSION
  10. 雨林木风win11 64位原版系统v2021.08
  11. install pecl php_Linux下 PHP 安装pecl_http方法
  12. 黑客丛林之旅通关攻略(共14关)
  13. python用双重循环输出菱形图案_使用循环创建菱形图案
  14. bootstrap3 snippets使用方法
  15. 数据仓库的四个层次设计
  16. 开始尝试贝茨视觉训练法
  17. driller fuzz arm问题解决记录
  18. 信号调理方法总结笔记
  19. 如何用大数据找女朋友?
  20. c++的lambda使用注意事项,可能导致的崩溃问题分析

热门文章

  1. setTimeout相关知识点
  2. 使用文件流的形式在浏览器下载word文档
  3. 鼠标捕获(setCapture,releaseCapture)的学习
  4. 关于SetCapture() 和 ReleaseCapture()的用法的个人理解[通俗易懂]
  5. svs文件转换为tiff文件
  6. ucgui 在《iBoard 电子学堂》上的移植
  7. 软件测试的艺术第六章总结
  8. 关于float的精度类型
  9. Mysql 学习计划
  10. Java 生成订单号(唯一id)方案