大家好,我遇到个问题,以前没出现过char mutexName[] = "Global\\name_mutex";
void func(string mutexName, bool bOpen)
{
if (!bOpen){
SECURITY_DESCRIPTOR sd;
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, TRUE, (PACL) NULL, FALSE); SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = &sd;
sa.bInheritHandle = TRUE;
mutex = CreateMutex(&sa, false, mutexName.c_str());
if (NULL == mutex)
{
throw "error";
} }
else
{
mutex = OpenMutex(MUTEX_ALL_ACCESS, false, mutexName.c_str());
if (NULL == mutex)
{
throw "warnning";
}
}
}我是在xp系统下,以上代码在一个进程的2个线程里运行。
主线程在等到一个线程调用 func(true);后再调用func(false);
问题:
出入true的主线程创建了mutex,但主线程传入false,OpenMutex失败,GetLastError 返回2,系统找不到指定的文件。
void func(string mutexName, bool bOpen)
{
if (!bOpen){
SECURITY_DESCRIPTOR sd;
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, TRUE, (PACL) NULL, FALSE); SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = &sd;
sa.bInheritHandle = TRUE;
mutex = CreateMutex(&sa, false, mutexName.c_str());
if (NULL == mutex)
{
throw "error";
} }
else
{
mutex = OpenMutex(MUTEX_ALL_ACCESS, false, mutexName.c_str());
if (NULL == mutex)
{
throw "warnning";
}
}
}我是在xp系统下,以上代码在一个进程的2个线程里运行。
主线程在等到一个线程调用 func(true);后再调用func(false);
问题:
出入true的主线程创建了mutex,但主线程传入false,OpenMutex失败,GetLastError 返回2,系统找不到指定的文件。
解决方案 »
- OPENFILENAME 获取多选的名称
- 消息和事件有啥区别?
- 我想做一个弹出菜单,弹出菜单改变北京颜色或者加背景图片,还可以在菜单里加图标的!
- 我用ADO向SQLSERVER数据库中加入二进制文件数据到image类型字段为合不对?
- 在多个窗口上绘制应该单独创建Graphics对象还是共享Graphics对象?
- 在虚拟函数PreTranslateMessage和虚拟函数WindowProc中处理Windows消息有何差异吗?
- win2000,winxp,winme,win9.x的相互兼容关系是怎样的?
- 从一个对话框给VIEW发消息,需要那些步骤?谢谢帮忙。
- 急急急,高分请教各位高手关于(debug)的调试问题!!!(一个VC新手)
- 求助,想写个获取文件版本号的小程序,出的错误不知如何解决
- skyxie(黑白精灵(闭关修炼+接私活))请进
- USB和串口之间转换问题
void func(string mutexName, bool bOpen)
{
if (!bOpen){
SECURITY_DESCRIPTOR sd;
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, TRUE, (PACL) NULL, FALSE); SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = &sd;
sa.bInheritHandle = TRUE;
mutex = CreateMutex(&sa, false, mutexName.c_str());
if (NULL == mutex)
{
throw "error";
} }
else
{
mutex = OpenMutex(MUTEX_ALL_ACCESS, false, mutexName.c_str());
if (NULL == mutex)
{
throw "warnning";
}
}
}
在初始化的时候,bOpen=FALSE;
第二个线程进来调用 OpenMutex 失败了
我是跟踪过了的
是另外一个线程其他地方出错推出,于是调用西沟函数CloseHandle了