CreateMutex创建的互斥变量如何在程序退出时自动销毁

kenshu 2010-05-17 04:58:53
有个硬件,最多只能使用8个资源.
所以,同时最多只能有8个相同的exe运行.

我用下面的方法

-----------------------------------------------
程序一进去调用:

static long CABC::GetID()
{
static long id = -1;
if (id == -1){
char lc[8] = {'1','2','3','4','5','6','7','8'};
long i;
char lc_ABC_MUTEX[] = {"ABC"};
CString ls_swap;
for (i = 0;i<8;i++){//分别尝试,是否有"ABC1","ABC2"......"ABC8"
ls_swap = lc_ABC_MUTEX;
ls_swap += lc[i];
HANDLE hMutex=CreateMutex(NULL, FALSE, ls_swap);
if(GetLastError()==ERROR_ALREADY_EXISTS){
}
else{
id = i;
break;
}
}
}
return id;
}
-----------------------------------------------

连续运行8个同样的EXE,分别取回0,1,......,7,第9个确实返回 -1;
把ID=7的那个关掉,第9个也可以取到7


但是,我把ID=0到ID=6的前7个关掉,第9个还是无法取到0,必须把前面所有的都关掉,第9个才能取到0.

如何解决?

谢谢!
...全文
369 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kenshu 2010-05-17
  • 打赏
  • 举报
回复
谢谢楼上各位.

谢谢!
kenshu 2010-05-17
  • 打赏
  • 举报
回复
Sorry,忘记写一个大前提,不想在程序退出时专门写一个代码,如ReleaseMutex.

因为想把所有的处理都写在一个类中,其它的东西最好不动.

还是用ReleaseMutex吧.
wangli820 2010-05-17
  • 打赏
  • 举报
回复
创建一个命名信号灯吧,设置最大数目为8, 每个程序退出时,释放信号灯
GeorgeSoros 2010-05-17
  • 打赏
  • 举报
回复
不好意思了,没积分了
灌水九段 2010-05-17
  • 打赏
  • 举报
回复
创建互斥量的时候保存一下handle 退出时closemutex或releasemutex
zwfgdlc 2010-05-17
  • 打赏
  • 举报
回复

BOOL ReleaseMutex(
HANDLE hMutex
);


kenshu 2010-05-17
  • 打赏
  • 举报
回复
排版排得不好

static long CABC::GetID()
{
static long id = -1;
if (id == -1){
char lc[8] = {'1','2','3','4','5','6','7','8'};
long i;
char lc_ABC_MUTEX[] = {"ABC"};
CString ls_swap;
for (i = 0;i<8;i++){//分别尝试,是否有"ABC1","ABC2"......"ABC8"
ls_swap = lc_ABC_MUTEX;
ls_swap += lc[i];
HANDLE hMutex=CreateMutex(NULL, FALSE, ls_swap);
if(GetLastError()==ERROR_ALREADY_EXISTS){
}
else{
id = i;
break;
}
}
}
return id;
}

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧