Win32 / C++。如何判断我的程序有多少个实例在运行? 大神们求解啊!

 我来答
stgogo123
2014-05-11 · TA获得超过179个赞
知道小有建树答主
回答量:88
采纳率:100%
帮助的人:80.5万
展开全部
用Mutex,新建Handle _mtx = CreateMutex(NULL, FALSE, _T("SomeName"));
然后用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。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式