作者clarkman (凉雨)
站内Programming
标题[问题] IPC的选择
时间Wed Jun 9 14:55:00 2010
我要执行三个Process A,B,C
A、B会将资料送到C处,让C负责写入Sram
C除了负责写入资料外,还会感应硬体的变化,并且通知A
因为这三个Process不是由同一个Father产生,所以造成彼此
不知道彼此的Handle,也无法像网路查到的Pipe、Message
可以由Father建立通道,再把通道的Handle送给child的两个
Process。(这点可以给我建议吗?我很大的困惑在这里,不同
Process怎麽知道共同的通道Handle?)
可以请给我一点建议,用哪个方式比较好吗?
以下是我查到的方法:
1. Pipe
本来我想用这个方式,但是Win CE不支援NamedPipe,为了
以後的弹性,可能不会使用此方式
2. Socket
会比较耗时,网路查到都不建议
3. Share Memory
如果我要用来存Sram,似乎是需要像是封包或一个阵列。
用Share Memory可能不能即时收到通知?只能一直去比对更
新了哪些地方?怕太费时,也无法即时反应
4. WM_COPYDATA
这个看起来很适合使用,而且可以使用FindWindow,不过查
到的资料都说这个会比较慢反应,而且送出的资料用Point
的话,变成送出的资料要一直留着,不然把资料塞到区域变
数送出後离开函式,对方收到Point,但指到的位置已经没有
资料?
另外,如果可以用FindWindow抓到C,A、B可以传给C,那C怎
麽送资料给B?也用FindWindow找B的Handle吗?
5. Message
这个看起来似乎也很适合,但是我不太懂怎麽让不同的几个
Process可以抓到同一个Message通道?查到的资料都写NT後
每个Process都有自己的通道,这样怎麽指定?
6. MailSlots
无法保证资料可以正确的传递。所以不考虑
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.22.144.222
※ clarkman:转录至看板 C_and_CPP 06/09 14:55
※ 编辑: clarkman 来自: 211.22.144.222 (06/09 14:58)
1F:→ brokenhand:ShareMemory+Broadcast message试试 114.32.93.67 06/14 01:21
2F:推 KaoChenlen:推上! SHM + UDP封包 = 无敌!! 113.21.81.161 06/18 11:52