怎样使程序只运行一个实例
怎样使程序在unix/linux环境下只运行一个实例?
在windows环境下可以使用:
方法一:
在IninInstance()函数加入如下代码:
HANDLE hObject = CreateMutex(NULL,FALSE,"SingleInstance");
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hObject);
AfxMessageBox("程序已经运行!");
return FALSE;
}
方法二,使用编译器来实现,较复杂一点
使用#pragma data_seg编译指令,共享一个全局变量
问题点数:20、回复次数:8Top
1 楼fierygnu(va_list)回复于 2006-03-18 23:59:52 得分 5
用文件的咨询锁。参考APUE。Top
2 楼thethefighter(龙卷风)回复于 2006-03-19 10:08:32 得分 0
unix 的Mutex是系统级的吗,
能不能用windows类似CreateMutex的方法,
来判断ERROR_ALREADY_EXISTS。
Top
3 楼lbaby(春天来了...)回复于 2006-03-19 17:41:58 得分 5
文件锁,这是标准用法
Top
4 楼lanying(蓝鹰)(问个不休)回复于 2006-03-19 18:09:45 得分 5
方法多了,文件锁,信号灯,pid文件 ...Top
5 楼thethefighter(龙卷风)回复于 2006-03-19 19:16:08 得分 0
使用文件锁时,程序当掉时,可以自动解锁,
用信号灯的话,信号灯可以自动归0吗?Top
6 楼lanying(蓝鹰)(问个不休)回复于 2006-03-19 20:08:22 得分 0
信号灯确实有down掉后,无法释放的问题Top
7 楼alaiyeshi(七宝树八宝饭)回复于 2006-03-20 08:53:11 得分 5
关于down掉的这些异常,我以前是把信号接管了,然后在里面,嘿嘿,把锁解开Top
8 楼fierygnu(va_list)回复于 2006-03-20 13:30:00 得分 0
SIGKILL无法接管:)Top




