windows内核对象可以通过唯一命名空间的方式在进程之间共享,因此如果想要程序只能打开一个,可以通过内核对象的创建来判断
HANDLE handle = ::CreateMutex(NULL, FALSE, _T("Only One"));
if (GetLastError() == ERROR_ALREADY_EXISTS) {
//退出程序
}
此处创建互斥器时,内核会去判断同样命名的对象是否已经存在。注意,即使是同样的内核对象,句柄也可能不同
创建的句柄会在进程结束时回收,所以不用手动close
本文详细介绍了如何通过Windows内核对象的唯一命名空间特性,在进程间实现互斥操作,确保同一时刻仅有一个进程可以执行特定任务,避免了资源竞争和数据冲突的问题。
1025

被折叠的 条评论
为什么被折叠?



