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