方法一:
/*建立全域性互斥體,然後在程序啟動時檢查該互斥體是否已被建立
只需要在initinstance()中加入
*/方法二:
乙個程式可以執行多個例項(程序),那我們如何讓它僅執行乙個例項呢?很簡單,使用#pragma編譯器指令在程序的位址空間內建立乙個「共享節」就可以 達到目的,這個「共享節」裡的資料為多個執行的程序所共享,這樣我們通過設定乙個變數比如:unsigned g_ninstancecount;作為執行例項的計數,在程式入口處檢測一下g_ninstancecount是否為1,true則禁止執行,否則 g_ninstancecount++並執行乙個例項。
具體如下:
#pragma data_seg("shared")//這個共享節叫做shared
unsigned g_ninstancecount =0;//計數初始為0
#pragma data_seg() //設定完畢
#pragma comment(linker,"/:section:shared,rws
")//這句話告訴聯結器,我要將shared設為讀寫共享
好了,讓我們實際動手來做乙個小的例子看看,在vc6.0下可以,但在其它ide(如code block)中就有不能達到效果的例子:
/********************************************
基於控制台的
********************************************/
#include
using namespace std;
#pragma data_seg("shared")
unsigned g_ninstancecount = 0;
#pragma data_seg()
#pragma comment(linker,"/section:shared,rws")
int main()
{if(g_ninstancecount>=1)
{cout<<"can only running an instance!"cout<<"this is a console program!"<
方法三:
要使應用程式只執行乙個例項,乙個簡單的方法是在應用程式類中使用互斥量,這可以用vc下的guidgen.exe程式產生.guidgen.exe位於vc安裝目錄commontools目錄下
例項1: 新建一基於對話方塊的工程ex1,採用預設設定
2: 用guidgen.exe產生乙個全域性標誌,#define one "產生的全域性標誌"
本例中產生的語句如下:#define one "0xbe8e2ce1, 0xdab6, 0x11d6, 0xad, 0xd0, 0x0, 0xe0, 0x4c, 0x53, 0xf6, 0xe6"
如果結果等於error_already_exists說明已經有乙個例項在執行了這時返回false.
VC程式只執行一次例項
方法一 建立全域性互斥體,然後在程序啟動時檢查該互斥體是否已被建立 只需要在initinstance 中加入 方法二 一 個程式可以執行多個例項 程序 那我們如何讓它僅執行乙個例項呢?很簡單,使用 pragma編譯器指令在程序的位址空間內建立乙個 共享節 就可以 達到目的,這個 共享節 裡的資料為多...
如何讓程式只執行一次例項
最近在做乙個系統的客戶端時,遇到乙個問題 客戶端執行在伺服器上時,如果同乙個使用者或其他使用者執行了這個客戶端,可能會導致錯誤。這就要求該程式的例項只能執行一次。using system using system.collections.generic using system.windows.fo...
如何讓程式只執行一次例項
using system using system.runtime.interopservices using system.windows.forms using system.diagnostics using system.reflection loop through the running...