卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

如何確保VC/MFC程序只運(yùn)行一個(gè)實(shí)例?

在很多項(xiàng)目中,需要確保一個(gè)進(jìn)程只運(yùn)行一次,比如串口、板卡等開發(fā)程序,由于資源是獨(dú)占的,所以只能運(yùn)行一次。下面介紹一種方法來實(shí)現(xiàn)這個(gè)功能。1. 聲明一個(gè)GUID首先需要在程序中聲明一個(gè)GUID,該GUI

在很多項(xiàng)目中,需要確保一個(gè)進(jìn)程只運(yùn)行一次,比如串口、板卡等開發(fā)程序,由于資源是獨(dú)占的,所以只能運(yùn)行一次。下面介紹一種方法來實(shí)現(xiàn)這個(gè)功能。

1. 聲明一個(gè)GUID

首先需要在程序中聲明一個(gè)GUID,該GUID將作為進(jìn)程的唯一標(biāo)識符??梢允褂靡韵麓a來聲明GUID:

```

static const GUID CDECL BASED_CODE _tlid

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

```

2. 聲明一個(gè)句柄

接下來需要聲明一個(gè)句柄,作為全局標(biāo)識符??梢允褂靡韵麓a來聲明句柄:

```

HANDLE hMutex;

```

3. 在應(yīng)用程序的*App::InitInstance()函數(shù)中,加入以下代碼

在應(yīng)用程序的*App::InitInstance()函數(shù)中,需要加入以下代碼,來創(chuàng)建一個(gè)互斥體,并檢查是否已經(jīng)創(chuàng)建過。如果已經(jīng)創(chuàng)建過,則退出程序。

```

// 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()函數(shù)中,關(guān)閉句柄

在程序退出時(shí),需要關(guān)閉之前創(chuàng)建的句柄??梢允褂靡韵麓a來關(guān)閉句柄:

```

if (hMutex ! NULL)

{

::ReleaseMutex(hMutex);

::CloseHandle(hMutex);

hMutex NULL;

}

```

5. 測試程序

現(xiàn)在,你可以測試程序了。這個(gè)程序/進(jìn)程只能運(yùn)行一次。如果嘗試打開第二個(gè)實(shí)例,程序?qū)⒅苯油顺觥?/p>

結(jié)論

通過以上步驟,我們可以很容易地確保VC/MFC程序只運(yùn)行一個(gè)實(shí)例。這對于某些需要獨(dú)占資源的程序非常有用。

標(biāo)簽: