Re: [問題] IPC的選擇
※ 引述《areyo (沒有名字的怪物)》之銘言:
: : 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沒關了
: 所以你不用擔心
所以說如果我想使用share Memory
就必須搭配4、5的方式來通知對方有更新?
如果不使用4、5(因為怕被Win綁太深,以後移植困難)
只用Share Memory處理,對方就無法立即接收反應?
這樣會不會造成已經更新兩次,結果對方發現有更新
結果第一筆的資料已經被第二筆的蓋掉
他能像Socket一樣,資料可以一直接收進來嗎?
如果我在SHARE MEMORY建立一個Ring buffer(存每筆資料的Address)
然後接收方只要不斷檢查in、out有沒有一致,最後進行接收?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.22.144.222
※ 編輯: clarkman 來自: 211.22.144.222 (06/10 13:30)
→
06/10 20:34, , 1F
06/10 20:34, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
0
1
以下文章回應了本文:
問題
1
4
完整討論串 (本文為第 4 之 8 篇):
問題
1
2
問題
1
6
問題
0
1
問題
0
1
問題
1
4
問題
5
18
問題
2
2