Re: [問題] 如何讀取外部傳進來的參數?

作者: EdisonX (卡卡獸)   2016-08-11 00:37:29
※ 引述《gn00618777 (非常念舊)》之銘言:
: 我知道在 main(int argc, char*argv){
: }
: 可以傳外部參數進去例如 xxx.exe "參數"
: 但如果我在 main 裡面有一個無窮迴圈 while
: while 裡面我該如何獲得外面傳進來的參數呢??(假設這個無窮迴圈不能read file)
: 短時間內想不出來="=
: 謝謝指教
推 wtchen: 東西出來後可以上來分享嗎?我對這很有興趣 08/10 20:07
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 可愛分隔線 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
剛好我對 IPC (inter process communication) 是初學,一起討論一下,
講錯的話請鞭小力點,謝謝。
首先要講,只要能達到二個 Process 相互通訊 (也可以一邊丟一邊收),
都叫 IPC,達成 IPC 這個目的的手法就多了,
https://en.wikipedia.org/wiki/Inter-process_communication
裡面列舉約 10 種方法,但注意這些 IPC 方法可能衍生幾個問題
(1) 實作難易度 (好啦, 這可能不是問題)
(2) 效率問題 (如要傳送大量的訊息、檔案時,還要考慮收到的資料時效性)
(3) 重覆收到相同訊息 (可能 server 發一次通知,client 收到二次通知)
最終當然是評估問題本質,再決定挑用哪個方法。
目前我只有在 Windows 底下實作過 IPC,
所以交流的可能有限。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 可愛分隔線 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
http://pan.baidu.com/s/1geITiYR IPC_V1.00.15.7z ,
(由於為私人使用空間,恕週末關閉,若覺得不錯的話我不介意板友用推文轉空間)
解壓後發現裡面超亂,主要包含下述東西
(1) 8 種 IPC 方法實作,包含 Client 端與 Server 端,也包含 X86 / X64 編譯。
(2) Executable 資料夾為所有生成之執行檔,./Executable/Result.xlsx
為八種方法之心得備註,以及簡易之計時整理,計時為以傳送一張超大之 bmp
圖檔 (恕我忘了那張圖跑哪去了 @@)
(3) SimpleDemoCode 資料夾為每個方法的重點程式碼整理
開發環境 Win 7 , IDE VS2010 , 程式語言 MFC
只是測試用,所以有很多東西很魔術。
8 種方法之細節還是看 Code 較佳,這裡不贅述,只講結論
(1) 最笨的方法是用外部檔案溝通,以檔案之生成、刪除、內容做為二個 Process
交握的手法。
(2) 測試最快的方法是 MemoryFile。
(3) 效能還可以接受、最容易撰寫的是 WM_DATACOPY。
(4) MailSolt 好處是可以當廣播系統使用,但要處理接收端會收到多次訊息。
(5) socket 其實我沒寫好,只是寫 sample,所以效能不算有跑出來,
另走 socket 要注意,一次傳送的 buffer 不能太大,不然會掛。
socket 大概是最常被推的方法,還能跨 OS 做 IPC。
(6) Pipe 也是常被推的方案,然後如果只是要簡單的話,
可以查一下 popen , pclose ( 不具名 pipe ).
注意是第 8 種方法很危險 ,
用的是 ReadProcessMemory / WriteProcessMemory (遊戲修改大師在用的東西),
也有人說這種方法不算 IPC,所以我沒納在效能排名裡面 (雖然它應是最快的)。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 可愛分隔線 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
以上,若敘述有誤請指正,歡迎補充,謝謝。
作者: wtchen (沒有存在感的人)   2016-08-11 01:48:00
推阿,感謝EdisonX大~~~~Real-time system 比較常用Semaphore的樣子
作者: EdisonX (卡卡獸)   2016-08-11 01:54:00
只能說還沒機會接觸 Real-time system.
作者: wtchen (沒有存在感的人)   2016-08-11 02:43:00
Message queue也有
作者: EdisonX (卡卡獸)   2016-08-11 02:48:00
範例用很多 message queue , SendMessage / PostMessage只是要傳大量資料的時候 Message Queue 可能不夠用
作者: damody (天亮damody)   2016-08-11 08:18:00
感謝範例
作者: drumstick (feng)   2016-08-11 09:31:00
感謝範例
作者: Yshuan (倚絃)   2016-08-11 11:51:00
這篇很實用
作者: popen (Penpineapple-applepen)   2016-08-12 10:02:00
查我我也無法教你
作者: TobyH4cker (Toby (我要當好人))   2016-08-12 10:50:00
只好插你了
作者: hichcock (快樂一整年 ^^~~~)   2016-08-12 15:32:00
好奇, pipe 比 memory map 慢!? 沒實測過, 跟想像的不同一直以為 pipe 是最快的了
作者: Schottky (順風相送)   2016-08-12 16:13:00
memory map 永遠是最快的,正確使用的話
作者: EdisonX (卡卡獸)   2016-08-13 00:17:00
奇怪,是我都用 popen / fread / pclose 的關係嗎 ? 我覺得 pipe 很慢,特別是在linux時,要去啟動另一個process.
作者: VictorTom (鬼翼&娃娃魚)   2016-08-13 14:30:00
推:)
作者: wtchen (沒有存在感的人)   2016-08-15 01:37:00
請問一下,超大bmp的size大約多少?想試著玩看看還有Shared memory不是要搭配Semaphore等同步機制?

Links booklink

Contact Us: admin [ a t ] ucptt.com