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

看板C_and_CPP作者 (Willy)時間9年前 (2016/08/31 11:11), 9年前編輯推噓7(7033)
留言40則, 4人參與, 最新討論串3/3 (看更多)
※ 引述《gn00618777 (非常念舊)》之銘言: : 我知道在 main(int argc, char*argv){ : } : 可以傳外部參數進去例如 xxx.exe "參數" : 但如果我在 main 裡面有一個無窮迴圈 while : while 裡面我該如何獲得外面傳進來的參數呢??(假設這個無窮迴圈不能read file) : 短時間內想不出來="= : 謝謝指教 我把我自己伺服器用的TCP and Unix domain Socket IPC整理在github上 https://github.com/hn12404988/Neural_Socket 這個專案的目的是「輕量,高效,穩定」的IPC,所以選擇TCP socket 和 Unix Domain 另外目前只有在Linux上測試而已,OSX我猜應該沒問題,windows可能就要改寫一些地方 server特色: 每個connection有自己的thread獨立運作,意思就是,一個server可以被好幾個client連接 每個thread接收自己的訊息,不會在開thread處理,所以處理完這個訊息回覆後,才會處理 下一個進來的訊息,如果connection被client關掉或是不明原因中斷連線,server會自己回收 掉那個thread client特色: 一個client可以同時跟好幾個server保持連線,需要設定一個最大連線數,如果滿了之後, 又有新的server要連線,client會關掉最少用的連線,然後加入新的。 除了傳統的「傳送然後接收」,還有「射後不理」,就是client發送訊息後,就開一個新的 thread自己去接收不重要的回覆,不會影響main thread運作。 「射後不理」不用擔心如果server處理太慢,或是client射太快,server有可能一次把兩次 的訊息一次讀取進去,因為client如果知道上一個「射後不理」還沒收到server的回傳 client會把新的訊息先存起來,等到上一個回來了,就會把訊息在馬上送出去 Note: 可以看得出來,server不管怎樣一定要回傳訊息,不然會拖慢到client的速度,雖然最終 client都會放棄沒有訊息回傳的溝通,但會嚴重影響效能。 其他細節請看example檔案,自己compile跑看看,如果有問題請在跟我說,或github上issue -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.133.16.181 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1472613117.A.414.html

08/31 11:44, , 1F
蠻多raw pointer 都用C++11 應該可以減少一點
08/31 11:44, 1F

08/31 11:46, , 2F
感覺命名可以稍微改一下 可讀性較好 像jkl vector 另外
08/31 11:46, 2F

08/31 11:46, , 3F
感覺你非常多vector 可以考慮把一些東西包起來
08/31 11:46, 3F

08/31 11:48, , 4F
像是ip_list port_list等 用個ds包起來可能比較好理解
08/31 11:48, 4F

08/31 11:48, , 5F
多提供點abstraction 讓使用者能了解high level idea
08/31 11:48, 5F

08/31 11:48, , 6F
然後jk 這種變數實在太多了xD 感謝你花時間貼上來 很
08/31 11:48, 6F

08/31 11:48, , 7F
厲害
08/31 11:48, 7F

08/31 12:13, , 8F
raw pointer有點個人怪癖,有點難改,jk是指什麼?
08/31 12:13, 8F

08/31 12:24, , 9F
你是指我用來記數的int j,k嗎?不然就要改成
08/31 12:24, 9F

08/31 12:25, , 10F
在function裡宣告,這樣每次執行都要再配新記憶體位置
08/31 12:25, 10F

08/31 12:26, , 11F
會影響到一丁點效能就是了,習慣要用的東西先全部宣告
08/31 12:26, 11F

08/31 12:31, , 12F
又不是用new出來的,i j k這種放for loop裡面就好
08/31 12:31, 12F

08/31 12:32, , 13F
然後你居然在socket_client.h裡面include cpp
08/31 12:32, 13F

08/31 12:33, , 14F
pimpl學一下,就不用include那麼多header
08/31 12:33, 14F

08/31 12:35, , 15F
然後寫C++的話,pointer幾乎都用不到
08/31 12:35, 15F

08/31 12:36, , 16F
都用c++11,unique_ptr會比較好
08/31 12:36, 16F

08/31 12:37, , 17F
感謝,我不知道pimpl,我都這樣include而已,等等去查
08/31 12:37, 17F

08/31 12:38, , 18F
raw pointer實在是個人怪癖,我控制欲對pointer很強
08/31 12:38, 18F

08/31 12:40, , 19F
然後你的inline應該用錯了
08/31 12:40, 19F

08/31 13:14, , 20F
Linux 上用 socket做IPC,不用domain socket而用tcp的理
08/31 13:14, 20F

08/31 13:14, , 21F
由是?
08/31 13:14, 21F

08/31 14:26, , 22F
有domain socket的,這是我從我自己用的分割出來的
08/31 14:26, 22F

08/31 14:26, , 23F
TCP比較通用,就把TCP的分割出來
08/31 14:26, 23F

08/31 14:27, , 24F
inline我真的是亂用,因為我上次查,比較新compiler
08/31 14:27, 24F

08/31 14:28, , 25F
會自己判斷要不要inline是否會加快效能,不是人決定的
08/31 14:28, 25F

08/31 14:28, , 26F
所以inline就隨便寫
08/31 14:28, 26F

08/31 18:12, , 27F
不過unix domain socket理論上效率會比tcp socket好,
08/31 18:12, 27F

08/31 18:13, , 28F
不過不知道新版kernel是不是有對loopback最佳化
08/31 18:13, 28F

08/31 18:48, , 29F
之後再花一些時間整理,把unix socket也加到這專案
08/31 18:48, 29F

08/31 21:09, , 30F
Raw pointer 除了更危險一點看不出來有啥差別....
08/31 21:09, 30F

08/31 21:10, , 31F
你這裡面有哪件事情是shared Ptr做不到的嗎
08/31 21:10, 31F

08/31 21:11, , 32F
簡單來說就是要寫給別人用的東西這樣寫有點糟 當然要是
08/31 21:11, 32F

08/31 21:11, , 33F
自己用可能沒差
08/31 21:11, 33F

08/31 21:11, , 34F
用的人哪知道jkl是什麼 會影響到什麼
08/31 21:11, 34F

08/31 22:05, , 35F
沒寫過給別人,看來這些習慣要改一改,之後順便用
08/31 22:05, 35F

08/31 22:06, , 36F
一般i,j,k這種記數用的,有甚麼好的名稱或包裝方式嗎
08/31 22:06, 36F

08/31 23:22, , 37F
i j k通常都是用來做為subscript,一看就知道是做甚麼了
08/31 23:22, 37F

09/01 03:39, , 38F
重點是計數器不用寫成data member吧
09/01 03:39, 38F

09/01 03:40, , 39F
而且雖然一看就知道 但是並不知道是給誰用的 這麼多個v
09/01 03:40, 39F

09/01 03:40, , 40F
ector 是要index誰
09/01 03:40, 40F
※ 編輯: hn12404988 (220.133.16.181), 09/02/2016 08:22:52
文章代碼(AID): #1NnahzGK (C_and_CPP)
文章代碼(AID): #1NnahzGK (C_and_CPP)