各种语言Mutex(互斥)实现程序单实例运行
2013-06-04 14:50
357 查看
在编程中如果不做处理的话,那么程序在运行一次之后还可以重复运行产生多个实例,这往往不是我们希望的,特别是对于一些无窗口的应用程序,多个程序在后台运行而我们却发现不了,会造成系统资源浪费。所以我们需要使用一定的方法限制程序使之只产生一个实例,当程序已经运行时就不能再运行之或报告程序已经运行之类的错误。
使程序单实例方法不止一种,在此介绍使用互斥(Mutex)来实现程序单实例运行的方法。Mutex本来是多线程同步用的,防止多个线程访问同一资源而引发冲突。
( 1 ) VC++
在程序初始化实例代码中加入以下代码:
HANDLE hMutex=CreateMutex(NULL,FALSE,"newMutex");//命名Mutex是全局对象,防止程序重复运行 ,互斥名为newMutex
//在所有的process都可以访问到
if(hMutex==NULL|| ERROR_ALREADY_EXISTS==::GetLastError())
{
//程序第二次或以后运行时,会得到Mutex已经创建的错误
...
return FALSE;
}
( 2 ) C#.NET
在C#程序入口点main程序断段中加入如下代码:
bool newMutex; //定义bool变量newMutex
Mutex m = new Mutex(true, "MutexForm", out newMutex); //创建Mutex,互斥名为MutexForm
if (newMutex) //判断Mutex创建是否成功
{
Application.Run(new FormLogin()); //如果创建成功运行主程序
m.ReleaseMutex(); //释放Mutex
}
( 3 ) Dephi
procedure tmainform.formcreate(sender: tobject);
var
mutexname: string;//互斥元名
hprevwnd, hdata: hwnd; //hprevwnd---窗口句柄, hdata---getprop返回的属性值
result: tmodalresult;
logindlg: tloginform;
begin
mutexname := application.exename; //以应用程序名作为互斥名
//创建互斥元.如果互斥元已经存在,这就是应用程序的第二个事例.
//注意:当应用程序结束时,互斥元自动关闭.
createmutex(nil, true, pchar(mutexname));
if (getlasterror() = error_already_exists) then
begin
...
end;
...
end;
使程序单实例方法不止一种,在此介绍使用互斥(Mutex)来实现程序单实例运行的方法。Mutex本来是多线程同步用的,防止多个线程访问同一资源而引发冲突。
( 1 ) VC++
在程序初始化实例代码中加入以下代码:
HANDLE hMutex=CreateMutex(NULL,FALSE,"newMutex");//命名Mutex是全局对象,防止程序重复运行 ,互斥名为newMutex
//在所有的process都可以访问到
if(hMutex==NULL|| ERROR_ALREADY_EXISTS==::GetLastError())
{
//程序第二次或以后运行时,会得到Mutex已经创建的错误
...
return FALSE;
}
( 2 ) C#.NET
在C#程序入口点main程序断段中加入如下代码:
bool newMutex; //定义bool变量newMutex
Mutex m = new Mutex(true, "MutexForm", out newMutex); //创建Mutex,互斥名为MutexForm
if (newMutex) //判断Mutex创建是否成功
{
Application.Run(new FormLogin()); //如果创建成功运行主程序
m.ReleaseMutex(); //释放Mutex
}
( 3 ) Dephi
procedure tmainform.formcreate(sender: tobject);
var
mutexname: string;//互斥元名
hprevwnd, hdata: hwnd; //hprevwnd---窗口句柄, hdata---getprop返回的属性值
result: tmodalresult;
logindlg: tloginform;
begin
mutexname := application.exename; //以应用程序名作为互斥名
//创建互斥元.如果互斥元已经存在,这就是应用程序的第二个事例.
//注意:当应用程序结束时,互斥元自动关闭.
createmutex(nil, true, pchar(mutexname));
if (getlasterror() = error_already_exists) then
begin
...
end;
...
end;
相关文章推荐
- C#使用Mutex实现程序单实例运行
- 使用Mutex实现程序单实例运行(c#)
- 互斥对象实现 程序单个实例运行
- 使用Mutex实现程序单实例运行(c#)
- 使用Mutex实现程序单实例运行(c#)
- 使用Mutex实现程序单实例运行(c#)
- 使用Mutex实现程序单实例运行(c#)
- 使用Mutex实现程序单实例运行(c#)
- C#利用Mutex实现只运行一个程序实例
- 使用Mutex实现程序单实例运行(c#)
- C#使用Mutex实现程序单实例运行
- C#利用Mutex实现只运行一个程序实例
- 利用互斥体(MUTEX)实现程序只允许运行一个实例
- C#使用Mutex简单实现程序单实例运行的方法
- 【VC】 实现程序只运行一个实例
- 只允许运行一个实例的程序(互斥程序)
- C# 实现程序只启动一次(多次运行激活第一个实例,使其获得焦点,并在最前端显示)
- VC++中实现程序互斥运行
- C#利用Mutex互斥量实现同时只有一个进程实例在运行
- JAVA程序单实例运行的实现方法