有些时候,我们不希望同一个程序在同一时间多次运行。当然,对于一些在前台运行的程序,这还比较好办,直接可以用肉眼看到;不过,对于后台程序或服务而言,光靠人工来判断就相当困难了。擒歙常泺那么,怎样才能知道程序已经在运行呢?
工具/原料
VS 2013
一、基本思路
1、要想保证只有一个程序实例在运行,可以利用内核对象——互斥对象做到这一点。当程序启动时,调用CreateMutex 创捋杏野卫建一个互斥对象。此时,如果已经有一个程序实例运行,即互斥对象已经被创建,则不再创建新的互斥对象,而是打开已经创建的互斥对象,同时GetLastError 会返回ERROR_ALREADY_EXISTS;否则,如果没有程序实例在运行,则创建新的互斥对象并运行程序。
2、以上的程序逻辑可用下面的图示来表示。
二、程序代码
1、在窗口的回调函数中,我们添加以下代码。首先,调用 CreateMutex 创建一个互斥对象。
2、若互斥对象已经存在,则打开,不创建新的互斥对象。
3、此时,做一些清理提示工作。
4、最后,结束当前进程(即只允许一个程序实例在运行)。
5、下图是程序运行效果。当多次运行该程序时,会保证有且只有一个程序实例在运行,同时弹出对话框提示。