Win32 / C++。如何判断我的程序有多少个实例在运行? 大神们求解啊!
1个回答
展开全部
用Mutex,新建Handle _mtx = CreateMutex(NULL, FALSE, _T("SomeName"));
然后用GetLastError() == ERROR_ALREADY_EXISTS判断Mutex是否已经存在。
这利用了Mutex是全局共享的,另一个进程能知道系统是否已经存在一个同样名字的Mutex。这种方法即使程序被重命名了也能判断。(记得退出时关闭Handle)
当然还有别的方法,比如枚举所有的进程找到同样名字的之类,但都相对麻烦一些。
然后用GetLastError() == ERROR_ALREADY_EXISTS判断Mutex是否已经存在。
这利用了Mutex是全局共享的,另一个进程能知道系统是否已经存在一个同样名字的Mutex。这种方法即使程序被重命名了也能判断。(记得退出时关闭Handle)
当然还有别的方法,比如枚举所有的进程找到同样名字的之类,但都相对麻烦一些。
追问
用GetLastError() == ERROR_ALREADY_EXISTS我只能判断一个程序实例是否在运行,但是我想让实例运行不能超过4个,不知道怎么做。 兄弟,你是怎么做的?
追答
Sorry,我看错了。这样,用Semaphore:
HANDLE sem = CreateSemaphore(NULL, Initvalue/*here=4*/, MaxValue/*whatever*/, "Global\SomeName");
然后每个进程拿到这个sem以后可以WaitForSingleObject(sem, 0),如果等到了就说明还没有4个实例,如果等不到就是有4个实例了。记得退出时Release。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询