互斥程序(程式), 簡單點說,就是在系統中只能有該程式的乙個例項執行. 現在很多軟體都有這功能,如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...