防止程序启动两次的方法CreateMutex()
来源:互联网 发布:数据堂工作环境怎么样 编辑:程序博客网 时间:2024/05/17 02:37
主要使用到CreateMutex()函数和GetLastError()以及一个常量ERROR_ALREADY_EXISTS.
当然, 你的程序有窗体的话, 还可以使用FindWindow().
进程的互斥运行
正常情况下,一个进程的运行一般是不会影响到其他正在运行的进程的。但是对于某些有特殊要求的如以独占方式使用串行口等硬件设备的程序就要求在其进程运行期间不允许其他试图使用此端口设备的程序运行的,而且此类程序通常也不允许运行同一个程序的多个实例。这就引出了进程互斥的问题。
实现进程互斥的核心思想比较简单:进程在启动时首先检查当前系统是否已经存在有此进程的实例,如果没有,进程将成功创建并设置标识实例已经存在的标记。此后再创建进程时将会通过该标记而知晓其实例已经存在,从而保证进程在系统中只能存在一个实例。具体可以采取内存映射文件、有名事件量、有名互斥量以及全局共享变量等多种方法来实现。下面就分别对其中具有代表性的有名互斥量和全局共享变量这两种方法进行介绍:
HANDLE
//
if
//
CloseHandle(m_hMutex);
m_hMutex
return
}
上面这段代码演示了有名互斥量在进程互斥中的用法。代码的核心是CreateMutex()对有名互斥量的创建。CreateMutex()函数可用来创建一个有名或无名的互斥量对象,其函数原型为:
LPSECURITY_ATTRIBUTES
BOOL
LPCTSTR
);
如果函数成功执行,将返回一个互斥量对象的句柄。如果在CreateMutex()执行前已经存在有相同名字的互斥量,函数将返回这个已经存在互斥量的句柄,并且可以通过GetLastError()得到错误代码ERROR_ALREADY_EXIST。可见,通过对错误代码ERROR_ALREADY_EXIST的检测可以实现CreateMutex()对进程的互斥。
参数
lpMutexAttributes
指向一个SECURITY_ATTRIBUTES结构的指针,这个结构决定互斥体句柄是否被子进程继承。
bInitialOwner
布尔类型,决定互斥体的创建者是否为拥有者
lpName
指向互斥体名字字符串的指针。互斥体可以有名字。
互斥体的好处是可以在进程间共享
心得体会:
刚才又执
- 防止程序启动两次的方法CreateMutex()
- 防止程序启动两次的方法CreateMutex()
- 防止程序启动两次的方法CreateMutex()
- 防止程序启动两次的方法CreateMutex()
- 防止程序启动两次的方法CreateMutex()
- 防止程序启动两次的方法CreateMutex()
- 防止程序启动两次的方法CreateMutex()
- 防止程序启动两次的方法CreateMutex()
- 防止程序启动两次的方法 CreateMutex()
- 防止程序启动两次的方法CreateMutex()
- 防止程序启动两次的方法CreateMutex()
- 防止程序启动两次的方法CreateMutex()
- 防止程序启动两次的方法CreateMutex()
- 防止程序启动两次的方法CreateMutex()
- 防止程序启动两次的方法CreateMutex()
- 防止程序启动两次的方法CreateMutex()
- 防止程序启动两次的方法CreateMutex()
- 防止程序启动两次的方法CreateMutex() (转载)
- WPF技术相关书籍推荐与下载地址
- 程序员必知3大查找
- 如何禁用一个进程注册表方法
- 鼠标经过图片,图片变亮,离开图片,图片变暗,代码实现
- eclipse中用空格(space)代替"制表符(tab)的设置
- 防止程序启动两次的方法CreateMutex()
- Hessian源码浅析-HessianSkeleton
- 如何悠闲帮助新人融入项目中
- 列表框输入方法
- 程序员必知8大排序
- 如何监测内存泄漏(引用自网络)
- ClistCtrl中常用的函数
- 几行代码简单清理内存,经过实验,效果不错
- Java中Math类的常用方法