用記憶體對映檔案實現應用程式只執行乙個例項

2021-06-10 08:43:11 字數 885 閱讀 8232

原理:

如果乙個應用程式的例項已經執行,那麼當再執行乙個例項時,系統只會為這個例項建立乙個新的記憶體對映檢視,這個記憶體對映檢視會被對映到第乙個例項所對映的虛擬記憶體中,這樣就可以在多個例項之間共享記憶體中的**和資料,可以通過資料來控制執行例項的個數即可。當然,要實現多個例項的資料共享,不是簡單的使用全域性變數就行了,應用程式的檔案映像會被分到不同的段中:

read:可讀資料段

write:可寫資料段

execute:可執行資料段

shared:該段的內容會被多個例項共享

編譯器在預設情況下,資料都不會被放到shared中,要想把資料發到該段中,需要特別告訴給編譯器,用2種方法:

#pragma data_seg("name"),當編譯器執行到這句時,會將其之下出現的已經初始化的變數放到shared段中

#pragma data_seg(),表示恢復預設

方式2#pragma data_seg("shared")

這個和方式1的區別是不需要初始化

除此之外,還要告訴聯結器要共享這些變數:

#pragma comment(linker,"/section:shared,rws")

示例**如下:

#include using namespace std;

//1#pragma data_seg("shared")

#pragma data_seg()

//2// #pragma data_seg("shared")

// #pragma data_seg()

#pragma comment(linker,"/section:shared,rws")

void main()

else }

用記憶體對映檔案實現多個程式間互斥執行!

if hmap null else if getlasterror error already exists else 當程式執行結束了,要記住呼叫closehandle hmap 關閉這個物件控制代碼,可以在initinstance函式最後return false之前呼叫。如果要考慮的更周到,使用...

用Visual C 實現P2P應用程式

一 前言 p2p,即英文peer to peer的縮寫,中譯為對等互聯或點對點技術。講到p2p,人們就會想起napster,napster讓人們認識到了p2p技術的威力,p2p技術也就通過napster進入了大多數使用者的視野,napster的 檔案交換功能是p2p的乙個主要應用。p2p技術可以讓使...

用Visual C 實現P2P應用程式

一 前言 p2p,即英文peer to peer的縮寫,中譯為對等互聯或點對點技術。講到p2p,人們就會想起napster,napster讓人們認識到了p2p技術的威力,p2p技術也就通過napster進入了大多數使用者的視野,napster的 檔案交換功能是p2p的乙個主要應用。p2p技術可以讓使...