※ 引述《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,所以我没纳在效能排名里面 (虽然它应是最快的)。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 可爱分隔线 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
以上,若叙述有误请指正,欢迎补充,谢谢。