CreateMutex创建的互斥变量如何在程序退出时自动销毁
有个硬件,最多只能使用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.
如何解决?
谢谢!
所以,同时最多只能有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.
如何解决?
谢谢!
...全文
相关推荐
多线程中互斥锁和临界区锁编码及特点
**自动销毁:**当最后一个引用临界区的线程退出时,临界区会被自动销毁。
易语言API创建互斥体禁止程序重复运行.7z
此外,还需要在程序退出时释放互斥体资源,这可以通过`CloseHandle` API实现:```易语言关闭句柄(.互斥体句柄)```通过以上步骤,我们就能有效地防止易语言编写的程序在同一台计算机上被多次运行
killmutex删除互斥体
在Windows操作系统中,我们可以使用CreateMutex()函数来创建一个互斥体,并用ReleaseMutex()或CloseHandle()来释放它。
VC++如何使用互斥量创建进程
- `FALSE`:表示互斥量创建时不自动拥有,这意味着第一个调用`WaitForSingleObject`的线程将获得所有权。
易语言API创建互斥体禁止程序重复运行.rar
创建互斥体:使用CreateMutex函数创建一个互斥体。此函数返回一个互斥体句柄,如果成功创建则为非零,否则为零。


进程/线程/DLL

