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