前一篇中簡單介紹了程序間通訊的機制之一-------訊息機制。本篇中我簡要的描述一下程序間通訊的另一種機制----------記憶體共享機制。
windows中要使用記憶體共享的方式在程序間通訊需要採用dll方式。由於win32把dll裝入全域性記憶體並把dll對映到每個程式的位址空間。所有載入dll的應用程式只能共享程式**,不能共享資料。要想使dll的資料區能設計成共享的儲存區,可以通過#pragma data_seg指令來建立乙個新段來做完成。但是這樣還不能夠做到資料共享,還要把段中將要共享的變數告訴聯結器。以下對這個過程進行介紹:
1,新建乙個空的dll工程,向裡邊新增相應的檔案;
2,在.def檔案中新增以下**
sections
myshared read write shared
3,在cpp檔案中新增以下**,記住共享資料變數的初始化很重要
#pragma data_seg("myshared")
char no[256]=text(""); //共享資料變數
volatile bool bincriticalsection=false; //資料同步標誌
#pragma data_seg()
#pragma comment(linker,"/section:myshared,rws")
ccriticalsection cs; //同步標誌
4,在cpp檔案中新增對共享資料區的讀寫函式:
//讀取資料
winapi lpstr getno()
while(bincriticalsection)
sleep(1);
return no;
//寫資料
winapi void setno(lpcstr lpstr)
while(bincriticalsection)
sleep(1);
cs.lock();
bincriticalsection=true;
strcpy(no,lpstr);
bincriticalsection=false;
cs.unlock();
5,新建兩個應用程式,將dll標頭檔案和lib檔案包含到程式中:
#include"dlltest.h"
#pragma comment(lib,"dlltest.lib")
就可以使用以上兩個函式(getno,setno)進行程序間通訊了。具體的我就不多說了。
程序間通訊機制詳解(4) 共享記憶體
共享記憶體就是允許兩個或多個程序共享一定的儲存區,共享記憶體對映能夠最大限度的降低核心空間和使用者空間之間的資料拷貝,當核心空間和使用者空間存在大量資料互動時,這些程序的資料傳輸不再涉及核心,從而大大提高系統的效能,是最快的ipc形式。當乙個程式載入進記憶體後,它被分成叫作頁的塊。每個程序都有屬於自...
程序間通訊 共享記憶體
下面是自己寫的乙個簡單的共享記憶體的程序間通訊的例子。共享記憶體是用於程序間大量資料共享的一種方法。include include include include include include int main if buf1 shmat shmid,0,0 void 1 strcpy buf1,...
程序間通訊 共享記憶體
共享記憶體是被多個程序共享的一部分物理記憶體。共享記憶體是程序間共享資料的一種最快的方式,乙個程序向共享記憶體區域寫入資料,共享這個記憶體區域的所有程序就可以立刻看到其中的內容。共享記憶體實現分兩個步驟 建立共享記憶體,使用shmget函式 對映共享記憶體,使用shmat函式 共享記憶體是一種最為高...