vc 只執行乙個例項,並啟用已執行例項

2021-05-23 05:48:45 字數 1239 閱讀 4931

程序的互斥執行:createmutex函式實現只執行乙個程式例項

正常情況下,乙個程序的執行一般是不會影響到其他正在執行的程序的。但是對於某些有特殊要求的如以獨佔方式使用序列口等硬體裝置的程式就要求在 其程序執行期間不允許其他試圖使用此埠裝置的程式執行的,而且此類程式通常也不允許執行同乙個程式的多個例項。這就引出了程序互斥的問題。

實現程序互斥的核心思想比較簡單:程序在啟動時首先檢查當前系統是否已經存在有此程序的例項,如果沒有,程序將成功建立並設定標識例項已經存在 的標記。此後再建立程序時將會通過該標記而知曉其實例已經存在,從而保證程序在系統中只能存在乙個例項。具體可以採取記憶體對映檔案、有名事件量、有名互斥 量以及全域性共享變數等多種方法來實現。下面就分別對其中具有代表性的有名互斥量和全域性共享變數這兩種方法進行介紹:

// 建立互斥量

handle m_hmutex = createmutex(null, false, "sample07");

// 檢查錯誤**

// 如果程式已經存在並且正在執行

if (getlasterror() == error_already_exists)

程式只啟動乙個例項的幾種方法

在硬碟上建立乙個檔案,在檔案裡設定乙個值,根據這個值來判斷程式是否已經啟動。

二,登錄檔法

=0, 13, "

starlee");

////

如果已經建立,就終止程序的啟動

if!=

null) 

&&(getlasterror() =="

該程序已經啟動", 

"錯誤", mb_ok);

return

false;}

if!=

handle m_hmutex;

m_hmutex 

=createmutex(null, true, 

"starlee

"); 

//檢測是否已經建立mutex

//如果已經建立,就終止程序的啟動

if((m_hmutex 

!=null) 

&&(getlasterror() 

==error_already_exists)) 

if(m_hmutex 

!=null)

上面兩種方法的思路和**新增的步驟都是一樣的,當然效果也一樣,選擇任何一種方法都能達到讓程序只啟動乙個例項的目的。

程式只執行乙個例項,並啟用前乙個例項

實現程式只執行一次的方法很多,但是原理都是一樣的,就是執行第一次的時候設定乙個標記,每次執行的時候檢查該標記,如果有就說明已經執行了。具體實現 1 在程式初始化的時候 initinstance 列舉所有的視窗,查詢本程式的例項是否存在 2 在主視窗初始化的時候在本視窗的屬性列表中新增乙個標記,以便程...

VC程式只執行乙個例項,並在開啟多個時啟用原視窗

一 單文件應用程式 繼續尋找下乙個視窗 hwndprevious getwindow hwndprevious,gw hwndnext 前一例項已存在,但找不到其主窗 afxmessagebox 已有乙個例項在執行,但找不到它的主視窗!可能出錯了 退出本例項 return false 2 在框架類的...

程序只執行乙個例項

守護程序往往需要設定使其只執行乙個例項,這裡展示檔案鎖的方式實現 1.使用fcntl 函式設定檔案鎖 include include include include include include include int main else pause return 0 2.使用flock 設定鎖 ...