看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《clarkman (涼雨)》之銘言: : ※ [本文轉錄自 Programming 看板 #1C3ph8ft ] : 作者: 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都有自己的通道,這樣怎麼指定? 我的認知.....3 4 5 都是講同一件事,你用sendmessage送 WM_COPYDATA這個MESSAGE 他就是用SHARE MEMORY來達成 而會"稍微"慢點原因是跟SENDMESSAGE有關他會等你把MEMORY取走後再回傳 當你C行程收到MESSAGE時就把資料COPY一份出來,就跟POINT沒關了 所以你不用擔心 : 6. MailSlots : 無法保證資料可以正確的傳遞。所以不考慮 這是小弟的拙見 請參考 希望對你有幫助 -- 生命是個過程 可悲的是它不能重來 可喜的是它也不需要重來 ~~~童夢奇緣~~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.23.177.183
clarkman:我成功了!感謝 06/10 20:34