作者clarkman (涼雨)
看板C_Sharp
標題Re: [問題] process
時間Thu Dec 30 23:44:17 2010
我是之前有問這個問題的人,回一下當初我的作法好了
我是採用share memory的方式,已經過了很久,有些地方會忘記,請多包涵
1. 配置記憶體空間
CreateFileMapping,Handle請填0xFFFFFFFF,此位置會讓OS知道你要
配置Share Memory
2. 映射記憶體
MapViewOfFile
3. 另一個process連接此空間
OpenFileMapping,,可以自己指定這個空間的名字,這樣可以讓另一個process
利用名字抓到這個空間。
我的作法其實是一開始先用這個函式去抓指定的空間,如果發現沒有,就代表沒有
配置,直接執行1. 和 2.的步驟配置,如此就可以讓所有process共用同一個module,
所以我實際是312這樣
4. 通訊
這個部份要看個人自己的設計,我自己的作法是利用ring buffer的方式設了兩區,
Write和Read區,當寫完資料,或是讀完資料,才將index+1,所以只要一直比對
In index和Out index即可知道是否有資料或是已滿。我做了Rx和Tx個別的檢查函式,
讓上層的Timer定期呼叫。
另外就是要自己制定通訊的protocol,這樣就可以做到了。
不過第四點的作法是我自己當初想的,網路那時我沒有找到通訊後的作法,
如果有更好的方式,希望可以有人分享一下,增進知識。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.104.14.198
→ Anonymoux:感謝 寫得很仔細 不過CreateFileMapping和MapViewOfFile 12/30 23:47
→ Anonymoux:這兩個function的出處 是C#4才有的嗎 因為我用的是2.0 12/30 23:49
→ clarkman:不好意思,我當初不是用c#,我用mfc,不過這是WIN API 12/30 23:50
→ clarkman:照理說應該都會有。我才剛在看C#,不太清楚C#有沒有專門 12/30 23:51
→ clarkman:的函式處理share momery 12/30 23:51
→ bdvstg:CreateFileMapping屬於kernel32 01/01 19:16
推 horngsh:KW: Plateform Invoke, System Interop C#. 01/01 19:20
推 horngsh:更正上面:Platform Invoke 01/01 19:21
→ bdvstg:KW是甚麼0.0? (我第一次知道pinvoke的正式名稱XD) 01/01 19:29
→ Anonymoux:KW = knowledge? 01/01 22:56
推 horngsh:KW = KeyWord 01/02 10:05