2016 - 2024

感恩一路有你

如何确保VC/MFC程序只运行一个实例?

浏览量:1323 时间:2024-07-01 21:17:26 作者:采采

在很多项目中,需要确保一个进程只运行一次,比如串口、板卡等开发程序,由于资源是独占的,所以只能运行一次。下面介绍一种方法来实现这个功能。

1. 声明一个GUID

首先需要在程序中声明一个GUID,该GUID将作为进程的唯一标识符。可以使用以下代码来声明GUID:

```

static const GUID CDECL BASED_CODE _tlid

{ 0x12345678, 0x1234, 0x5678, { 0x12, 0x34, 0x56, 0x78, 0x12, 0x34, 0x56, 0x78 } };

```

2. 声明一个句柄

接下来需要声明一个句柄,作为全局标识符。可以使用以下代码来声明句柄:

```

HANDLE hMutex;

```

3. 在应用程序的*App::InitInstance()函数中,加入以下代码

在应用程序的*App::InitInstance()函数中,需要加入以下代码,来创建一个互斥体,并检查是否已经创建过。如果已经创建过,则退出程序。

```

// Create a mutex with a name based on the GUID

CString strMutexName;

(_T("Global%s"), _tlid);

hMutex ::CreateMutex(NULL, TRUE, strMutexName);

if (ERROR_ALREADY_EXISTS ::GetLastError())

{

// The mutex already exists, so another instance is running.

TRACE(_T("Application instance already running

"));

return FALSE;

}

```

4. 在*App::ExitInstance()函数中,关闭句柄

在程序退出时,需要关闭之前创建的句柄。可以使用以下代码来关闭句柄:

```

if (hMutex ! NULL)

{

::ReleaseMutex(hMutex);

::CloseHandle(hMutex);

hMutex NULL;

}

```

5. 测试程序

现在,你可以测试程序了。这个程序/进程只能运行一次。如果尝试打开第二个实例,程序将直接退出。

结论

通过以上步骤,我们可以很容易地确保VC/MFC程序只运行一个实例。这对于某些需要独占资源的程序非常有用。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。