看板 C_Sharp 關於我們 聯絡資訊
我是之前有問這個問題的人,回一下當初我的作法好了 我是採用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:推薦一個好物 http://www.pinvoke.net 01/01 19:15
bdvstg:CreateFileMapping屬於kernel32 01/01 19:16
bdvstg:http://goo.gl/We3QH 01/01 19:17
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