运行一个实例的程序(互斥程序)
来源:互联网 发布:淘宝天猫首页优化 编辑:程序博客网 时间:2024/06/07 18:48
运行一个实例的程序(互斥程序)
有的时候我们需要编写出的应用程序在同一时间只允许运行一个实例。有一种比较流行的方式,解决另人恶心的“该程序已经运行”的对话框,比如千千静听,如果程序被第二次运行,它会直接将已经打开的程序前置,这样做确实温柔许多。
方法一:同步基元 (互斥对象Mutex)
通过CreateMutex创建互斥对象--使程序只能运行一个实例
在程序开始运行时使用CreateMutex来创建互斥对象,如果在这之前本程序已经运行了,互斥对象就不能成功创建,这样就能判断在程序运行前是否已有一个本程序的实例在运行了。这种方法相对比较简单,而且很稳定。互斥锁定可以在另一个进程中定义,因为操作系统知道有名称的互斥锁定,它由不同的进程共享.如果没有给互斥锁定指定名称,互斥锁定就是未命名的,不在不同的进程之间共享.
在程序运行的初始化阶段加入以下代码:
注意CreateMutex的第三个参数,它指定了互斥对象的标志,系统就是根据此标志来识别是否是同一个互斥对象,为了防止别的程序和我们的程序使用相同的互斥对象造成程序无法运行,我建议大家创建一个GUID并且加上自己的信息作为标识,这样和别的程序标识相同的概率就几乎为0了。 在程序结束阶段别忘了关闭互斥对象的句柄:CloseHandle(Only);
方法二:判断进程 (遍历进程)
如果程序是多线程的(比如Chrome浏览器),便无法正确处理下去。这种情况更适合使用方法一。
方法三:全局原子法
算是非常古老的方法,就是利用Windows给我们提供的全局原子来进行判断。
- 运行一个实例的程序(互斥程序)
- 互斥运行一个程序实例
- 只允许运行一个实例的程序(互斥程序)
- 互斥对象之只运行一个实例程序
- MFC 程序只能运行一个实例 互斥对象
- 利用互斥对象实现一个程序只运行一个实例的方法.
- 使用进程互斥实现WinForm程序只运行一个实例(VB.Net)
- C# 创建互斥进程(程序只能运行一个实例)
- C#中程序的互斥运行
- 实现程序的互斥运行
- C#中程序的互斥运行
- 互斥对象实现 程序单个实例运行
- 各种语言Mutex(互斥)实现程序单实例运行
- NSIS—程序互斥函数(只能运行一个安装程序,安装时不能卸载)
- 创建互斥对象,让程序只运行一个。
- 只能运行程序的一个实例
- 仅运行一个程序的单个实例
- C++程序运行一个实例(互斥量法)
- kde里的ibus不能激活,不能光标跟随,解决办法
- C# Excel操作类
- TAG Replica Watches – Sophisticated and Inexpensive
- ArcGIS 如何解决地图显示中的锯齿现象
- 一个简单的Fibonacci类的封装
- 运行一个实例的程序(互斥程序)
- 《深入浅出 Ext JS 》(第 2 版)即将上市
- 拨开迷雾-单片机和嵌入式LINUX开发的那点事儿
- module 常识
- Flex+blazeDS+Spring+Tomcat的整合
- lua2.1的文法
- .NET中的后台线程--IsBackground属性
- 打印信息输出函数
- 初识Java面向对象的特性