作者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
1F:→ Anonymoux:感谢 写得很仔细 不过CreateFileMapping和MapViewOfFile 12/30 23:47
2F:→ Anonymoux:这两个function的出处 是C#4才有的吗 因为我用的是2.0 12/30 23:49
3F:→ clarkman:不好意思,我当初不是用c#,我用mfc,不过这是WIN API 12/30 23:50
4F:→ clarkman:照理说应该都会有。我才刚在看C#,不太清楚C#有没有专门 12/30 23:51
5F:→ clarkman:的函式处理share momery 12/30 23:51
7F:→ bdvstg:CreateFileMapping属於kernel32 01/01 19:16
9F:推 horngsh:KW: Plateform Invoke, System Interop C#. 01/01 19:20
10F:推 horngsh:更正上面:Platform Invoke 01/01 19:21
11F:→ bdvstg:KW是甚麽0.0? (我第一次知道pinvoke的正式名称XD) 01/01 19:29
12F:→ Anonymoux:KW = knowledge? 01/01 22:56
13F:推 horngsh:KW = KeyWord 01/02 10:05