类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
windows下实现进程互斥的方法通常类似于:
HANDLE proc_mutex = ::CreateMutexA (NULL,FALSE,"MYPROGRAMXXX");
if(GetLastError == ERROR_ALREADY_EXISTS)
{
return printf("xxxx");
}
ACE里进程锁在windows下基本实现是:
HANDLE proc_mutex = ::CreateMutexA (NULL,FALSE,"MYPROGRAMXXX");
switch(WaitForSingleObject (proc_mutex , 0))
{
case WAIT_OBJECT_0:
case WAIT_ABANDONED:
break;
case WAIT_TIMEOUT:
return printf("xxxx");
default:
return printf("xxxx");
}
现在我有一个模块用了ace的进程锁来防止启动多个进程实例,但现在发生了几次
可以同时存在多个进程实例的情况
ace的进程锁我这里很多模块都用,常年都没有发现问题,出现问题的模块也只是
最近发生了几次了,而且没有找到重现规律,不知道哪位同学朋到过类似的问题没
有?请赐教,多谢!(比如在进程启动时运行进程或者通过远程控制启动进程是否
可能导致这种问题?我还没找到规律,不过出现问题的时候有类似的操作)
网友回答:
switch(WaitForSingleObject (proc_mutex , 0))
{
case WAIT_OBJECT_0:
case WAIT_ABANDONED:
break;
case WAIT_TIMEOUT:
return printf("xxxx");
default:
return printf("xxxx");
}
有没有看在这是里是进入了哪个case?
可以用原子表和原子函数处理
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=198015
混分
判断一下CreateMutexA的返回值,GetLastError to check if the mutex has existed.