windows下程序間通訊與執行緒間通訊

2022-08-25 18:06:25 字數 2757 閱讀 9988

程序間通訊:

只需簡單的指標操作就可讀取和修改檔案的內容。

win32 api允許多個程序訪問同一檔案對映物件,各個程序在它自己的位址空間裡接收記憶體的指標通過使用這些指標,不同程序就可以讀或修改檔案的內容, 實現對檔案中資料的共享。

檔案對映是在多個程序間共享資料的非常有效方法,有較好的安全性。但檔案對映只能用於本地機器的程序之間,不能用於網路中 ,而開發者還必須控制程序間的同步。

關於檔案對映見:

2. 共享記憶體 

win32 api中共享記憶體(shared memory)實際就是檔案對映的一種特殊情況。程序在建立檔案對映物件時用0xffffffff來代替 檔案控制代碼(handle), 

就表示了對應的檔案對映物件是從作業系統頁面檔案訪問記憶體,其它程序開啟該檔案對映物件就可以訪問該記憶體塊。由於共享記憶體是用 檔案對映實現的, 所以它也有較好的安全性,也只能執行於同一計算機上的程序之間

2.3 匿名管道 

管道(pipe)是一種具有兩個端點的通訊通道:有一端控制代碼的程序可以和有另一端控制代碼的程序通訊。管道可以是單向-一端是唯讀的,另一端點是只寫的; 也可以是雙向的一管道的兩端點既可讀也可寫

匿名管道(anonymous pipe)是 在父程序和子程序之間,或同一父程序的兩個子程序之間傳輸資料的無名字的單向管道。通常由父程序建立管 道, 

然後由要通訊的子程序繼承通道的讀端點控制代碼或寫 端點控制代碼,然後實現通訊。父程序還可以建立兩個或更多個繼承匿名管道讀和寫控制代碼的子程序。 

這些子程序 可以使用管道直接通訊,不需要通過父程序。 

匿名管道是單機上實現子程序標準i/o重定向的有效方法,它不能在網上使用,也不能用於兩個不相關的程序之間。 

2.4 命名管道 

命名管道(named pipe)是伺服器程序和乙個或多個客戶程序之間通訊的單向或雙向管道。不同於匿名管道的是命名管道可以在不相關的程序之間和不 同計算機之間使用,

伺服器建立命名管道時給它指定乙個名字,任何程序都可以通過該名字開啟管道的另一端,根據給定的許可權和伺服器程序通訊。 

命名管道提供了相對簡單的程式設計介面,使通過網路傳輸資料並不比同一計算機上兩程序之間通訊更困難,不過如果要同時和多個程序通訊它就力不從心了。 

2.5 郵件槽 

郵件槽(mailslots)提 供程序間單向通訊能力,任何程序都能建立郵件槽成為郵件槽伺服器。其它程序,稱為郵件槽客戶,可以通過郵件槽的名字給 

郵件槽伺服器程序傳送訊息。進來的消 息一直放在郵件槽中,直到伺服器程序讀取它為止。乙個程序既可以是郵件槽伺服器也可以是郵件槽客戶, 

因此可建立多個 郵件槽實現程序間的雙向通訊。 

通過郵件槽可以給本地計算機上的郵件槽、其它計算機上的郵件槽或指定網路區域中所有計算機上有同樣名字的郵件槽傳送訊息。 

廣播通訊的訊息長度不能超過400位元組,非廣播訊息的長度則受郵件槽伺服器指定的最大訊息長度的限制。 

郵件槽與命名管道相似,不過它傳輸資料是通過不可靠的資料報(如tcp/ip協議中的udp包)完成的,一旦網路發生錯誤則無法保證訊息正確地接收, 

而 命名管道傳輸資料則是建立在可靠連線基礎上的。不過郵件槽有簡化的程式設計介面和給指定網路區域內的所有計算機廣播訊息的能力, 

所以郵件槽不失為應用程式傳送 和接收訊息的另一種選擇。 

2.6 剪貼簿 

剪貼簿(clipped board)實質是win32 api中一組用來傳輸資料的函式和訊息,為windows應用程式之間進行資料共享提供了乙個中介, 

windows已建立的剪下(複製)-貼上的機制為不同應用程式之間共享不同格式資料提供了一條捷徑。當使用者在應用程式中執行剪下或複製操作時, 

應 用程式把選取的資料用一種或多種格式放在剪貼簿上。然後任何其它應用程式都可以從剪貼簿上拾取資料,從給定格式中選擇適合自己的格式。 

剪貼簿 是乙個非常鬆散的交換媒介,可以支援任何資料格式,每一格式由一無符號整數標識,對標準(預定義)剪貼簿格式,該值是win32 api定義的常量; 

對非 標準格式可以使用register clipboard format函式註冊為新的剪貼簿格式。利用剪貼簿進行交換的資料只需在資料格式上一致或都可以 

轉化為某種格式就行。但剪貼簿只能在基於windows的程式中使用,不能在網路上使用。

2.7 sockets 

windows sockets規範是以u.c.berkeley大學bsd unix中流行的socket介面為範例定義的一套windows下的網 絡程式設計介面。除了berkeley socket原有的庫函式以外 

,還擴充套件了一組針對windows的函式,使程式設計師可以充分利用windows的訊息機 制進行程式設計。 

現在通過sockets實現程序通訊的網路應用越來越多,這主要的原因是sockets的跨平台性要比其它ipc機制好得多,另 外winsock 2.0不僅支援tcp/ip協議, 

而且還支援其它協議(如ipx)。sockets的唯一缺點是它支援的是底層通訊操作,這使得在單機 的程序間進行簡單資料傳遞不太方便, 

這時使用下面將介紹的wm_copydata訊息將更合適些。 

2.8.wm_copydata訊息 

wm_copydata是一種非常強大卻鮮為人知的訊息。當乙個應用向另乙個應用傳送資料時,傳送方只需使用呼叫sendmessage函式, 

引數是目 的視窗的控制代碼、傳遞資料的起始位址、wm_copydata訊息。接收方只需像處理其它訊息那樣處理wm_copy data訊息,這樣收發雙方就實現了 資料共享。 

wm_copydata是一種非常簡單的方法,它在底層實際上是通過檔案對映來實現的。

執行緒間通訊方式

1、執行緒間的通訊方式

Windows下程序間通訊

1 程序與程序通訊 2 程序通訊方法 2.1 檔案對映 win32 api中共享記憶體 shared memory 實際就是檔案對映的一種特殊情況。程序在建立檔案對映物件時用0xffffffff來代替檔案控制代碼 handle 就表示了對應的檔案對映物件是從作業系統頁面檔案訪問記憶體,其它程序開啟該...

windows程序間通訊

摘 要 隨著人們對應用程式的要求越來越高,單程序應用在許多場合已不能滿足人們的要求。編寫多程序 多執行緒程式成為現代程式設計的乙個重要特點,在多程序程式設計中,程序間的通訊是不可避免的。microsoft win32 api 提供了多種程序間通訊的方法,全面地闡述了這些方法的特點,並加以比較和分析,...

Windows程序間通訊方式

align center windows程序間通訊方式 align 1 檔案對映 win32 api允許多個程序訪問同一檔案對映物件,各個程序在它自己的位址空間裡接收記憶體的指標。通過使用這些指標,不同程序就可以讀或修改檔案的內容,實現了對檔案中資料的共享。應用程式有三種方法來使多個程序共享乙個檔案...