全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4179
推到 Plurk!
推到 Facebook!

程式間互相傳送資料問題

答題得分者是:暗黑破壞神
friendlly
高階會員


發表:22
回覆:144
積分:103
註冊:2003-04-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-16 17:55:34 IP:61.64.xxx.xxx 訂閱
一台PC內 A & B 要互相傳遞訊息,且資料量每一次10K 且是固定大小不會增大或減小
資料傳遞要求越快越好...也就是A 只要透過週邊裝置一有資料擷取進來 B 能即時更新最好...

一般常用的方法有
1.利用share memory ---------->CreateFileMapping 方式
2.依照Form Handle 利用SendMessage 的方式傳送資料
3. Socket 本機
4.其他的方式.....

請問上述1 ,2 3 的方式哪一種較適合....在資料量大且要求一直更新

編輯記錄
dllee 重新編輯於 2007-04-19 23:51:21, 註解 如果是提問,請記得將文章分類設為 [問題] 喔,謝謝您的配合。‧
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-16 18:24:52 IP:211.22.xxx.xxx 未訂閱
既然都知道常用的方法了,Friedly兄應該很容易評估的出來吧!
如果是我,我就不想搞的那麼複雜,使用一個自訂的檔案格式來做資料寫出與讀取的任務,為啥呢?因為簡單、好寫、容易維護~
那麼如何及時存取呢?利用FindFirstChangeNotification、FindCloseChangeNotification,以及FindNextChangeNotification再配合WaitForSingleObjec等四個WINAPI就可以即時得知檔案的變動狀況了!很容易編寫。以上請參考!
===================引 用 friendlly 文 章===================
一台PC內 A & B 要互相傳遞訊息,且資料量每一次10K 且是固定大小不會增大或減小
資料傳遞要求越快越好...也就是A 只要透過週邊裝置一有資料擷取進來 B 能即時更新最好...

一般常用的方法有
1.利用share memory ---------->CreateFileMapping 方式
2.依照Form Handle 利用SendMessage 的方式傳送資料
3. Socket 本機
4.其他的方式.....

請問上述1 ,2 3 的方式哪一種較適合....在資料量大且要求一直更新
friendlly
高階會員


發表:22
回覆:144
積分:103
註冊:2003-04-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-16 19:15:26 IP:61.64.xxx.xxx 訂閱
謝謝 Stallion 的回覆
因為我對於FindFirstChangeNotification 的方式不熟,
用這樣的監控方式 , 檔案是否實際已經有讀寫到硬體上..
因為架構上是CFCard or DOC 所以必須考慮到讀寫次數的問題...

請問 CreateFileMapping 的方式也是有實際讀寫到硬體上嗎?

===================引 用 Stallion 文 章===================
既然都知道常用的方法了,Friedly兄應該很容易評估的出來吧!
如果是我,我就不想搞的那麼複雜,使用一個自訂的檔案格式來做資料寫出與讀取的任務,為啥呢?因為簡單、好寫、容易維護~
那麼如何及時存取呢?利用FindFirstChangeNotification、FindCloseChangeNotification,以及FindNextChangeNotification再配合WaitForSingleObjec等四個WINAPI就可以即時得知檔案的變動狀況了!很容易編寫。以上請參考!
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-16 22:34:49 IP:218.170.xxx.xxx 未訂閱
我會選用本機的 socket 來做。
只是要分清楚誰是 socket server 誰是 socket client.
socket server 一定要先執行。
為什麼嘛。因為它有現成的 socket 元件來用。
不必去搞些個 Messsage 麻煩。

至於 file 的方式。有好有壞。
好是容易寫。反正定時去讀它。寫它就不用去管它那些個 notify 了。
壞就是它的速度有限。
還有你的媒體有限次數讀寫也是限制。

Message 會是我最後的考量。
因為我覺得我玩樂的時間比較重要。
要我為了一個案子去學 M$ 的東西。
我有些不甘願。我會選前兩個方案是因為不必再多去試”新”玩具。
可以早點結案早點去玩我喜歡的事情。

雖然我喜歡玩電腦,但不代表我喜歡在有壓力的情況下玩電腦。^_^
lu
高階會員


發表:11
回覆:189
積分:195
註冊:2003-11-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-04-23 16:52:15 IP:203.73.xxx.xxx 訂閱
基本上1和3都可以達到你的要求,如果程式寫的好的話,你應該沒啥感覺(如果SOCKET你是用 Multi Thread方式來寫的話,Single Thread 也不是不行,只是可能程式會頓一下,不過應該還好)

如果是偶,偶會選擇
1.利用share memory Multi Thread Event 來處理
寫法如下
1. 程式一開始產生 share memory
2. 利用 CreateEvent 產生一個 Event
3. 用一個THREAD,用 WaitForSingleObject Or WaitForMultipleObjects 等待那個EVENT
4. 若有要更新資料時,先把資料更新至MEMORY,再用 SetEvent 通知另外一支程式接收資料

上述寫法的好處是
1. 速度快
2. 沒有那一之程式要先RUN或後RUN的問題
3.程式碼還算簡單.....(前提是你對 Multi Thread 還算熟的話)

參考看看吧

暗黑大大,偶不是要給你吐槽,鼻要生氣,偶只是提出不同方向,供提問者參考而已
===================引 用 friendlly 文 章===================
一台PC內 A & B 要互相傳遞訊息,且資料量每一次10K 且是固定大小不會增大或減小
資料傳遞要求越快越好...也就是A 只要透過週邊裝置一有資料擷取進來? B 能即時更新最好...

一般常用的方法有?
1.利用share memory ---------->CreateFileMapping? 方式
2.依照Form Handle 利用SendMessage 的方式傳送資料
3. Socket 本機
4.其他的方式.....

請問上述1 ,2 3 的方式哪一種較適合....在資料量大且要求一直更新

暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-04-23 17:02:29 IP:61.225.xxx.xxx 未訂閱
呵。沒差,我只是依在寫程式的難易度跟除錯時的難易度來建議。
能自己寫 thread 當然很好。
只是我不喜歡搞那麼複雜。^_^
我的腦袋比較單純。無法去判斷 multi thread 下的狀況。
或是應該說,我不信任它吧。 hahaha
系統時間:2024-11-22 7:34:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!