双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

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

kenshu kenshu 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
有个硬件,最多只能使用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.

如何解决?

谢谢!
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
kenshu
进程/线程/DLL 15,466 成员 49,169 内容