C_and_CPP 板


LINE

※ 引述《gn00618777 (非常念旧)》之铭言: : 我知道在 main(int argc, char*argv){ : } : 可以传外部参数进去例如 xxx.exe "参数" : 但如果我在 main 里面有一个无穷回圈 while : while 里面我该如何获得外面传进来的参数呢??(假设这个无穷回圈不能read file) : 短时间内想不出来="= : 谢谢指教
1F:推 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,所以我没纳在效能排名里面 (虽然它应是最快的)。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 可爱分隔线 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 以上,若叙述有误请指正,欢迎补充,谢谢。 -- If there is no tomorrow, I want to see u last time. --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.195.138.11
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1470847058.A.1B3.html
2F:推 wtchen: 推阿,感谢EdisonX大~~~~ 08/11 01:48
3F:→ wtchen: Real-time system 比较常用Semaphore的样子 08/11 01:52
4F:→ EdisonX: 只能说还没机会接触 Real-time system. 08/11 01:54
5F:推 wtchen: Message queue也有 08/11 02:43
6F:→ EdisonX: 范例用很多 message queue , SendMessage / PostMessage 08/11 02:48
7F:→ EdisonX: 只是要传大量资料的时候 Message Queue 可能不够用 08/11 02:48
8F:推 damody: 感谢范例 08/11 08:18
9F:推 drumstick: 感谢范例 08/11 09:31
10F:推 Yshuan: 这篇很实用 08/11 11:51
11F:推 popen: 查我我也无法教你 08/12 10:02
12F:→ TobyH4cker: 只好插你了 08/12 10:50
13F:→ hichcock: 好奇, pipe 比 memory map 慢!? 没实测过, 跟想像的不同 08/12 15:32
14F:→ hichcock: 一直以为 pipe 是最快的了 08/12 15:33
15F:→ Schottky: memory map 永远是最快的,正确使用的话 08/12 16:13
16F:→ EdisonX: 奇怪,是我都用 popen / fread / pclose 的关系吗 ? 我觉 08/13 00:17
17F:→ EdisonX: 得 pipe 很慢,特别是在linux时,要去启动另一个process. 08/13 00:18
18F:推 VictorTom: 推:) 08/13 14:30
19F:推 wtchen: 请问一下,超大bmp的size大约多少?想试着玩看看 08/15 01:37
20F:推 wtchen: 还有Shared memory不是要搭配Semaphore等同步机制? 08/15 02:46
wtchen: 对我来说Semaphore是Shared memory安全机制不算两种东西 08/15 02:46 所有 IPC 都要有同步没错,不过同步机制一直都是另一个可以讨论的范围, 所以我的 sample code 也没放进去。 --------------------------------------------------------------------------- 刚再下载重看一下 Code,发现 Windows Defect 竟然会把里面的东西判病毒。 bmp 图档我预设是放在 C:\Users\EdisonX\Desktop\IPC\demobmp\P2_8294x5529.bmp ( UI 可选路径和图档 ),所以大小约 8294 x 5529 x 3 + 54 (再声明,这是粗算), 算下来约 131 MB,操作方式和介面可能有点乱, 以 DATACOPY_IPCClient / DATACOPY_IPCServer 做为简易说明。 ---------------------------------------------------------------------------- 比较莫名的操作大概是 Client 端,有几个 Button 。 (1) Set Buf 0 --> 将准备要收的 Buffer 清零,并计时。 (2) Write Buf 0 --> 将 Buffer 写入 C:\\IPCClient.bmp 里,并计时。 (3) 将接收到的 Buffer , 存到另一个 Buffer 里去,并计时。 ( 是的,没错,这里要做 Deep Copy 的动作,原因是 DATACOPY 拿到的资料有时效限制,在某个时间点後该 Pointer 将失效, 故做 Deep Copy , 至於是否真的必要 Deep Copy , 看应用。 ) (4) Write Cpy Buf --> 将刚做完 Deep Copy 的副本, 存到 C:\\IPCClient.bmp,并计时。 (5) Clear Msg --> 清除讯息提示。 注意,若自己电脑 C 槽需要读写权限,请直接在 Code 里面改成其他路径, 这份 Copy 没处理系统管理者权限问题。 (1) 开启 DATACOPY_IPCServer 专案,先 Build + Execute。 (2) 选择 filename , 保险起见请选 bmp 24 bpp , 当时我的环境是测这东西。 (3) 开启 DATACOPY_IPCClient 专案,Build + Execute (4) 按下 DATACOPY_IPCServer 里面的 COPYDATA Button, 这时 Client 会收到整个图档,但只存在於 memory。 (5) 到 DATACOPY_IPCClient ,按下 Write Cpy Buf 後,会写入档案并开图, 用图验证资料传送是否正确。 (6) 在这里例子里,按下 DATACPY_IPCClient 里的 Write Buf, 一样写档开图, 发现图开不起来,主因是 Buffer 失效。 其他的执行档操作也是大同小异,剩下的就 trace 、小修改、看结果吧。 ※ 编辑: EdisonX (180.177.73.92), 08/15/2016 04:12:08







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP