CreateMutex的使用
CreateMutex作用是找出当前系统是否已经存在指定进程的实例。如果没有则创建一个互斥体。
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTESlpMutexAttributes, // 指向安全属性的指针
BOOLbInitialOwner, // 初始化互斥对象的所有者
LPCTSTRlpName // 指向互斥对象名的指针
);
创建一个互斥体(MUTEX)
返回值
Long,如执行成功,就返回互斥体对象的句柄;零表示出错。会设置GetLastError。如果返回的是一个有效句柄,但指定的名字已经存在,GetLastError也会设为ERROR_ALREADY_EXISTS,bInitialOwner的值将会被忽略。如果调用者限制了权限,GetLastError将会返回ERROR_ACCESS_DENIED,这个时候应该使用OpenMutex函数。
参数表
参数 类型及说明
lpMutexAttributes SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,或传递零值(将参数声明为ByVal As Long,并传递零值),表示使用不允许继承的默认描述符
bInitialOwner BOOL,如创建进程希望立即拥有互斥体,则设为TRUE。一个互斥体同时只能由一个线程拥有
lpName String,指定互斥体对象的名字。用vbNullString创建一个未命名的互斥体对象。如已经存在拥有这个名字的一个事件,则打开现有的已命名互斥体。这个名字可能不与现有的事件、信号机、可等待计时器或文件映射相符
一旦不再需要,注意必须用CloseHandle函数将互斥体句柄关闭。从属于它的所有句柄都被关闭后,就会删除对象
线程中止前,一定要调用ReleaseMutex释放互斥体,如不慎未采取这个措施,就会将这个互斥体标记为废弃(下一个释放的等待函数会返回WAIT_ABANDONED),并自动释放所有权。共享这个互斥体的其他应用程序也许仍然能够用它,但会接收到一个废弃状态信息,指出上一个所有进程未能正常关闭。这种状况是否会造成影响取决于涉及到的具体应用程序。
在Windows系统中,线程可以在等待函数中指定一个此线程已经拥有的互斥体,由于Windows的防死锁机制,这种做法不会阻止此线程的运行。
使用例子编辑
常用操作mutex的函数还有:ReleaseMutex/OpenMutex/WaitForSingleObject/WaitForMultipleObjects。
创建互斥体
h_mutex1=CreateMutex(NULL,FALSE,"mutex_for_readcount");//创建一个互斥体
检查错误代码
#include <stdio.h>
#include <windows.h>
...... // main function
HANDLE m_hMutex = CreateMutex(NULL, FALSE, "Sample07");// 检查错误代码
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
// 如果已有互斥量存在则释放句柄并复位互斥量
CloseHandle(m_hMutex);
m_hMutex = NULL;
// 程序退出
return FALSE;
};
//上面这段代码演示了有名互斥量在进程互斥中的用法。代码的核心是CreateMutex()对有名互斥量的创建。
CreateMutex() 用于有独占要求的程序 (在其进程运行期间不允许其他使用此端口设备的程序运行,或不允许同名程序运行)。
详细例子
下面这段代码详细介绍了CreateMutex函数的使用方法:[1]
#include "stdafx.h"
#include "windows.h"
int main(int argc, char* argv[])
{
HANDLE m_hMutex = CreateMutex(NULL,TRUE,"cplusplus_me");
DWORD dwRet = GetLastError();
if (m_hMutex)
{
if (ERROR_ALREADY_EXISTS == dwRet)
{
printf("程序已经在运行中了,程序退出!\n");
CloseHandle(m_hMutex);
return 0;
}
}
else
{
printf("创建互斥量错误,程序退出!\n");
CloseHandle(m_hMutex);
return 0;
}
while(1)
{
printf("cplusplus_me\n");
}
CloseHandle(m_hMutex);
return 0;
}
CreateMutex的使用相关推荐
- CreateMutex创建互斥体可以用于只运行进程的一个实例
CreateMutex 作用 找出当前系统是否已经存在指定进程的实例.如果没有则创建一个互斥体.CreateMutex()函数可用来创建一个有名或无名的互斥量对象,其函数原型为 VC声明 HANDLE ...
- 关于程序多开的尝试。CreateMutex,OpenMuxtex,ReleaseMutex
因为偶尔会遇到对那些不能支持双开的程序进行多开.. 根据前一阵转的一篇文件了解到,现在大多程序都用CreateMutex方式来限制多开, 于是有个想法:它Create了,我Release它,然后不就可 ...
- 防止程序启动两次的方法CreateMutex()
在工程文件中, WinMain函数里加上以下代码(此代码在BCB6.0下运行): HANDLE hMutex = CreateMutex(NULL, false, "Pro ...
- C++使用Windows API CreateMutex函数多线程编程
C++中也可以使用Windows 系统中对应的API函数进行多线程编程.使用CreateThread函数创建线程,并且可以通过CreateMutex创建一个互斥量实现线程间数据的同步: #includ ...
- Delphi CreateMutex 防止程序多次运行
windows是个多用户多任务的操作系统,支持多个程序同时运行,如果你的程序不想让用户同时运行一个以上, 那应该怎样做呢? 本文将介绍避免用户同时运行多个程序的例子. 需要用到的函数CreateMut ...
- hook createmutex openmutex 实现多开
通过HOOK createmutex 来多开程序,比如微信. FARPROC addrOpenMutexW = NULL; FARPROC addrCreateMutexW = NULL;void h ...
- CreateMutex、WaitForSingleObject、ReleaseMutex——创建互斥对象
CreateMutex CreateMutex作用是找出当前系统是否已经存在指定进程的实例.如果没有则创建一个互斥体. 互斥对象是系统内核维护的一种数据结构,它保证了对象对单个线程的访问权 互斥对象的 ...
- CreateEvent、CreateSemaphore、ReleaseSemaphore、CreateMutex
/// 用户模式 对事件进行初始化操作 HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes, // 安全属性BOOL bManualR ...
- c++使用CreateMuteX函数创建互斥对象单一运行实例
c++使用CreateMuteX函数创建互斥对象单一运行实例 #include "stdafx.h" #include <Windows.h>// 判断是否重复运行 B ...
最新文章
- 三、Spring Boot在org.springframework.boot组下应用程序启动器
- linux下面获取当前bing-国内版的壁纸
- NET Core微服务之路:实战SkyWalking+Exceptionless体验生产下追踪系统
- 二进制搜索树_数据结构101:二进制搜索树
- 第二百六十三天 how can I 坚持
- C++安全方向opensssl(三)3.1 什么是单项散列函数
- 《你有多少问题要请示》精华集粹
- 企业数字化转型:构建“感知—思考—响应—反馈优化”闭环
- 十款微信小程序源码分享
- SQL 常用英文单词
- 学校运动会广播稿计算机,学校运动会广播稿十篇
- 强化学习导论_Example 6.5: Windy Grid-world
- python玩转我的世界_PYTHON玩转我的世界——批量生成铁傀儡
- 页面自动获取导入excel内容
- ps大图缩小让小图更清晰
- 2020.9.23 金山云后台开发岗笔试 2道编程
- linux设置开机自启服务,linux设置服务开机自启动的三种方式
- ONVIF工具使用说明
- C语言--师生信息管理系统(第一次小项目)
- Base64 SHA1 MD5
热门文章
- Jenkins-Test
- 计算机网络考前复习知识点(基础)
- VLOOKUP 函数出现 #N/A 错误的 4 种情况(附解决方法)
- 五险一金 | 每月缴纳的社保费用都去哪了?(好漂亮的小姐姐)
- 校园食堂明厨亮灶智能视频监控 YOLOv5
- python发送带表格的邮件_PYTHON自动发送报表邮件
- Unity中使用Glow 11边缘发光插件
- python3 中文乱码 UnicodeEncodeError: ‘latin-1‘ codec can‘t encode characters
- 8m照片宽和高是多少_世界上最大的相册:每页宽达8米(能容纳一万张照片)
- 5个月两次坠机,波音737-8有啥硬伤?没那么简单