Re: [问题] 如何读取外部传进来的参数?

楼主: hn12404988 (Willy)   2016-08-31 11:11:53
※ 引述《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
作者: steve1012 (steve)   2016-08-31 11:44:00
蛮多raw pointer 都用C++11 应该可以减少一点感觉命名可以稍微改一下 可读性较好 像jkl vector 另外感觉你非常多vector 可以考虑把一些东西包起来像是ip_list port_list等 用个ds包起来可能比较好理解多提供点abstraction 让使用者能了解high level idea然后jk 这种变量实在太多了xD 感谢你花时间贴上来 很厉害
楼主: hn12404988 (Willy)   2016-08-31 12:13:00
raw pointer有点个人怪癖,有点难改,jk是指什么?你是指我用来记数的int j,k吗?不然就要改成在function里宣告,这样每次执行都要再配新内存位置会影响到一丁点效能就是了,习惯要用的东西先全部宣告
作者: Caesar08 (Caesar)   2016-08-31 12:31:00
又不是用new出来的,i j k这种放for loop里面就好然后你居然在socket_client.h里面include cpppimpl学一下,就不用include那么多header然后写C++的话,pointer几乎都用不到都用c++11,unique_ptr会比较好
楼主: hn12404988 (Willy)   2016-08-31 12:37:00
感谢,我不知道pimpl,我都这样include而已,等等去查raw pointer实在是个人怪癖,我控制欲对pointer很强
作者: Caesar08 (Caesar)   2016-08-31 12:40:00
然后你的inline应该用错了
作者: askacis (ASKA)   2016-08-31 13:14:00
Linux 上用 socket做IPC,不用domain socket而用tcp的理由是?
楼主: hn12404988 (Willy)   2016-08-31 14:26:00
有domain socket的,这是我从我自己用的分割出来的TCP比较通用,就把TCP的分割出来inline我真的是乱用,因为我上次查,比较新compiler会自己判断要不要inline是否会加快效能,不是人决定的所以inline就随便写
作者: askacis (ASKA)   2016-08-31 18:12:00
不过unix domain socket理论上效率会比tcp socket好,不过不知道新版kernel是不是有对loopback最佳化
楼主: hn12404988 (Willy)   2016-08-31 18:48:00
之后再花一些时间整理,把unix socket也加到这专案
作者: steve1012 (steve)   2016-08-31 21:09:00
Raw pointer 除了更危险一点看不出来有啥差别....你这里面有哪件事情是shared Ptr做不到的吗简单来说就是要写给别人用的东西这样写有点糟 当然要是自己用可能没差用的人哪知道jkl是什么 会影响到什么
楼主: hn12404988 (Willy)   2016-08-31 22:05:00
没写过给别人,看来这些习惯要改一改,之后顺便用一般i,j,k这种记数用的,有什么好的名称或包装方式吗
作者: Caesar08 (Caesar)   2016-08-31 23:22:00
i j k通常都是用来做为subscript,一看就知道是做什么了
作者: steve1012 (steve)   2016-09-01 03:39:00
重点是计数器不用写成data member吧而且虽然一看就知道 但是并不知道是给谁用的 这么多个vector 是要index谁

Links booklink

Contact Us: admin [ a t ] ucptt.com