我有一個用C++ \ MFC編寫的代碼,它作爲Windows服務和(普通)C++ \ MFC Windows進程運行 - 現在我希望使用命名互斥和共享內存(文件映射)在兩者之間進行通信。如何在Windows服務和進程之間使用命名互斥和共享內存?
這怎麼可能?
我有一個用C++ \ MFC編寫的代碼,它作爲Windows服務和(普通)C++ \ MFC Windows進程運行 - 現在我希望使用命名互斥和共享內存(文件映射)在兩者之間進行通信。如何在Windows服務和進程之間使用命名互斥和共享內存?
這怎麼可能?
這取決於您的通信要求。通常服務會創建互斥鎖和共享內存,客戶打開它們並執行其他操作。 OutputDebugString()是使用互斥鎖和共享內存(以及某些事件)的IPC的典型示例。 OutputDebugString()如何工作的Here is a detailed examination;你可以做類似的事情。
我建議以下
服務創建一個互斥體,2個事件和內存映射文件(MMF),所有命名
當服務將數據發送到其他進程
a。取得互斥鎖的所有權
b。將數據寫入m.m.f.
c。信號事件#1,這意味着該服務有程序的新信息
d。釋放互斥
當程序需要將數據發送到服務
一個。取得互斥鎖的所有權
b。將數據寫入m.m.f.
c。信號事件#2,這意味着該程序有服務的新信息
d。釋放互斥體
該服務檢查是否開啓事件#2。如果不去做它的東西,否則它:
a。 b。擁有m.m.f
b。讀取數據
c。重置事件#2
d。釋放互斥體
程序檢查是否開啓事件#1。如果不去做它的東西,否則它:
a。 b。擁有m.m.f
b。讀取數據
c。重置事件#1
d。發佈mutext
這種方法的問題是,消息可能會丟失時(例如服務管理寫在第2級的消息,之前該程序可以讀取第一),只有1進程可連接本身到服務(你必須確保它)
我建議一個基於套接字的解決方案,如果可能的話,在這些問題更緊密的地方發生。
P.S.您可以使用m.m.f來製作某種隊列以避免第一個問題
歡迎來到SO,Amit。 – 2010-09-19 19:03:27