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

2021-06-16 13:05:30 字數 2149 閱讀 7758

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

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

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

static void main() 

else

}

說明:程式中通過語句 system.threading.mutex run = new system.threading.mutex(true, "jiaao_test", out runone);來申明乙個互斥體變數run,其中"jiaao_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() 

else

}

3、在formclosed事件中新增如下**: 

globaldeleteatom(globalfindatom("jiaao_test"));//刪除原子"jiaao_test"

以上為建立互斥程式(程序)的基本通用的思想,個人認為,第一種方法最好。以上所有**都在vs.net2005 中測試通過。 

實現方式四:

using system;

using system.drawing;

using system.collections;

using system.componentmodel;

using system.windows.forms;

using system.data;

using system.threading;

namespace exam_使用程式只能夠執行乙個

else

}}}

C 只能執行乙個winForm程序

using system using system.collections.generic using system.linq using system.windows.forms using system.diagnostics using system.runtime.interopservic...

C 建立互斥程式 只允許執行乙個程式例項

方法一 使用執行緒互斥變數.通過定義互斥變數來判斷是否已執行例項,但是這種方法有乙個問題,當程式執行中需要採取重啟程式時會出現問題,沒有同意程式執行的情況下,仍然提示有形同程式在執行。把program.cs檔案裡的main 函式改為如下 private static mutex s mutex 應用...

互斥執行乙個程式例項

在win32下,實現程式互斥執行的方法有很多種,我簡單分析以下幾種不同的實現 一 在vc下的實現 visual c 是win32程式設計最主要也是最強大的程式設計工具這一,引用一名話來說vc就是 只有你想不到的,沒有vc做不到的 廢話少說,下面看看用vc是如何這個功能。a 使用編譯器來實現 使用mf...