VC程式只執行一次例項

2021-09-06 04:13:04 字數 1435 閱讀 6388

方法一:

/*建立全域性互斥體,然後在程序啟動時檢查該互斥體是否已被建立

只需要在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...