C 只能執行乙個例項程式的方法

2021-12-29 20:47:57 字數 1489 閱讀 1925

互斥程序(程式), 簡單點說,就是在系統中只能有該程式的乙個例項執行. 現在很多軟體都有這功能,如maxthon 可以設定為"只允許開啟乙個窗體",還有bitcomet等. 我也是看到這些軟體的這個功能才來研究這個問題的.  要實現程式的互斥,通常有三中方式,下面用 c#  語言來實現:

實現方式一: 使用執行緒互斥變數. 通過定義互斥變數來判斷是否已執行例項.c#實現如下:

把program.cs檔案裡的main()函式改為如下**:

static void main()

else

}說明:程式中通過語句 system.threading.mutex run = new system.threading.mutex(true, "xinbiao_a_test", out runone); 來申明乙個互斥體變數run,其中"xinbiao_a_test"為互斥體名,布林變數runone用來儲存是否已經執行了該程式事例.

實現方式二:   採用判斷程序的方式,我們在執行程式前,查詢程序中是否有同名的程序,同時執行位置也相同程,如是沒有執行該程式,如果有就就不執行.在c#中應用system.diagnostics名字空間中的process類來實現,主要**如下:

1,在program.cs檔案中新增函式如下:

public static system.diagnostics.process runninginstance() 

} } //no other instance was found, return null. 

return null; 

}  2,把main ()函式改為如下**:

static void main()

else

}實現方式三:全域性原子法,建立程式前,先檢查全域性原子表中看是否存在特定原子a(建立時新增的),存在時停止建立,說明該程式已執行了乙個例項;不存在則執行程式並想全域性原子表中新增特定原子a;退出程式時要記得釋放特定的原子a哦,不然要到關機才會釋放。c#實現如下:

1、申明winapi函式介面:

[system.runtime.interopservices.dllimport("kernel32.dll")]

public static extern uint32 globaladdatom(string lpstring);  //新增原子

[system.runtime.interopservices.dllimport("kernel32.dll")]

public static extern uint32 globalfindatom(string lpstring);  //查詢原子

[system.runtime.interopservices.dllimport("kernel32.dll")]

public static extern uint32 globaldeleteatom(uint32 natom);  //刪除原子

2、修改main()函式如下:

static void main()

&nbs

使程式只能執行乙個例項

使我們的程式只能有乙個正在執行的例項。並且在第二次執行時,若前乙個例項主視窗處於最小化狀態,就讓前乙個例項恢復原大小顯示出來。前一例項程序執行期間得留下乙個可供後一例項程序判斷的標誌,類似程序間通訊,可以參考一些ipc的方式。不過這裡不需要傳遞多少資料,僅僅有個標誌就ok。乙個簡單思路 程式開始時建...

C 建立互斥程序(程式只能執行乙個例項)

c 建立互斥程序 程式 互斥程序 程式 簡單點說,就是在系統中只能有該程式的乙個例項執行.現在很多軟體都有這功能,如maxthon 可以設定為 只允許開啟乙個窗體 還有bitcomet等.我也是看到這些軟體的這個功能才來研究這個問題的.要實現程式的互斥,通常有4中方式,下面用 c 語言來實現 實現方...

怎麼讓C 程式同時只能執行乙個例項

雙擊乙個winform程式,會開啟乙個介面,也即執行了乙個程式的例項 雙擊多次的時候,會出現多個程式介面。有時候我們需要只允許程式只能同時執行乙個例項。實現方式有很多。一.程序互斥 原理 通過獲取系統程序列表,如果發現有重名的,則表示程式已經執行了,此時新執行的程序就退出 實現 system.dia...