火山软件开发平台

标题: [开源]水淼·进程通讯类 - 使用投递消息方式构建进程读写... [打印本页]

作者: shuimiao    时间: 2024-3-10 19:28
标题: [开源]水淼·进程通讯类 - 使用投递消息方式构建进程读写...
本帖最后由 shuimiao 于 2024-3-10 19:36 编辑

以前使用火山的命名管道功能,因为不能覆盖写数据,只能弃用。后来改为投递消息方式构建进程间的数据交互。前段时间看到有个火友也遇到命名管道不好用的问题,我就说过要把我的功能给封装出来分享,现在来了。



本类可以指定通道(也就是管道)的代码进入,相同通道的才能通信。必定有且只有一个主导方,其它多方可以与主导方通信。任何一方写数据,其它方都会收到读数据事件,读写数据可以传入数据名称用以区分不同类型的数据。

可以固定本程序是主导方或其它各方,如果主导方失联,则其它各方自动退出,如果主导方没有运行,其它各方也无法运行。


(, 下载次数: 29)

也可以自You主导方(就是谁先运行谁是主导方)。还可以后期强制变更主导方。如果主导方失联,则其它各方自动切换新主导方。



(, 下载次数: 28)


作者: hrq520    时间: 2024-3-10 22:00
可以加入 仰望升级工具 套餐么:噜阿噜:噜阿噜:噜阿噜
作者: shuimiao    时间: 2024-3-10 22:05
hrq520 发表于 2024-3-10 22:00
可以加入 仰望升级工具 套餐么:噜阿噜:噜阿噜:噜阿噜

我没用过仰望,这个看仰望自己加吧
作者: wangvoldp    时间: 2024-3-11 01:13
66666666666
作者: adrenminbi    时间: 2024-3-11 08:28
进程通讯类 - 使用投递消息方式构建进程读写..
作者: alanwoo    时间: 2024-3-11 08:41
学习学习
作者: 上等兵    时间: 2024-3-11 08:50
好东西啊.
作者: 承易    时间: 2024-3-11 10:46
进程通讯好东西啊 能打通各种编程语言之间的调用  
作者: alexqj    时间: 2024-3-11 11:06
666666
水淼的质量都有保证,能加到升级工具里就更好了
作者: htpmcj    时间: 2024-3-11 11:10
666666
作者: 网猫    时间: 2024-3-11 22:24

作者: aycap    时间: 2024-3-12 11:38
人才啊
作者: huayanzhen    时间: 2024-3-12 17:17
支持水淼 好东西
作者: urenai    时间: 2024-3-12 17:36
阔以哦
作者: 2995455338    时间: 2024-3-12 18:01
66666666666
作者: guangye1    时间: 2024-3-12 20:23
厉害了。看看老师的代码
作者: 仰望    时间: 2024-3-12 22:46
进来看看
作者: wangvoldp    时间: 2024-3-12 23:11
写的不错哦,提点小建议哈, 仅供参考,
判断窗口是否被关闭用 IsWindow 是不是更好呢,
另外发送数据写到文件, 收到再读出来一是速度慢, 二是浪费硬盘, 用共享内存多好,速度又快又不读写硬盘
另外连续调用两次写不一样的数据,有一个子进程窗口卡了1秒,他会收到两条消息,他从文件中读出的数据应该第一条呢还是第二条呢
感觉如果不要效率通讯发送copy消息最为保险(内部也是共享内存), 优点时可以有一个整数返回值,缺点是他sendmessage时对方窗口卡的话,发送方也会卡,可以用带超时解决, 如果要效率的话用postmessage加共享内存
作者: shuimiao    时间: 2024-3-13 01:02
wangvoldp 发表于 2024-3-12 23:11
写的不错哦,提点小建议哈, 仅供参考,
判断窗口是否被关闭用 IsWindow 是不是更好呢,
另外发送数据写到文件, ...

建议可以,如果卡住的话,肯定是只能读取到最新写入的数据。我觉得这个写数据,应该放在读数据事件下,判断对方是不是完成了某某数据的处理,处理了再自动写新数据,这样就不怕卡住导致数据不同步了。读写数据可以互相沟通的,数据是字节集,想包含什么指令和内容都行,还可以指定数据名称。发送消息容易卡住也影响效率肯定是不推荐的。不过共享内存的话确实也是个选择。不过一般不是很严格要求效率的话写文件的方式就可以了,简单粗暴不会内存泄露,类被销毁自动删除本地读写目录中的临时文件,也不会堆积文件浪费硬盘。后面我再研究下共享内存
作者: fengyishen    时间: 2024-3-13 04:24
水淼新作品吖,必须支持一下。这个可以用来执行CMD命令吗?
作者: ゞ情非得已Sky    时间: 2024-3-13 07:16
久了没来论坛    进来摸鱼
作者: 正版商业用户    时间: 2024-3-13 07:59
很好,以前易语言有一个进程通讯模块很好用似乎也是水淼的
作者: smk718    时间: 2024-3-13 09:03
感谢大佬分享~
作者: 落雪有声    时间: 2024-3-13 09:50
支持大佬,总是能给大家带来惊喜
作者: dengzf    时间: 2024-3-13 10:17
支持,,,,,,,,,,,,,
作者: shuimiao    时间: 2024-3-13 10:37
fengyishen 发表于 2024-3-13 04:24
水淼新作品吖,必须支持一下。这个可以用来执行CMD命令吗?

功能只是让不同进程互相交流数据,运行cmd什么的都是程序自己的事,想干嘛都可以
作者: yifan09    时间: 2024-3-13 11:46
好东西
作者: fengyishen    时间: 2024-3-13 12:24
shuimiao 发表于 2024-3-13 10:37
功能只是让不同进程互相交流数据,运行cmd什么的都是程序自己的事,想干嘛都可以 ...

看介绍是自己的N进程通信,我的意思是,能像匿名管道运行cmd命令实时回显吗?如果可以,能否给个示例
作者: 一叶之秋    时间: 2024-3-13 15:36
666666
作者: shuimiao    时间: 2024-3-14 09:53
fengyishen 发表于 2024-3-13 12:24
看介绍是自己的N进程通信,我的意思是,能像匿名管道运行cmd命令实时回显吗?如果可以,能否给个示例 ...

这需要两个程序都使用本类才能沟通。
cmd端输出重定向到本程序这属于winapi的操作了,除非你的cmd端也使用本类的写数据方法就能回传给主程序实时显示。
作者: yb1984724    时间: 2024-3-14 15:21
谢谢分享!~
作者: 网络注册会员    时间: 2024-3-14 17:11

学习学习
作者: 寒风    时间: 2024-3-15 02:01
66666666666
作者: Pomelo    时间: 2024-3-15 14:15
66666666
作者: 回忆菌    时间: 2024-3-16 13:39
支持一下:噜阿噜
作者: xiaowin    时间: 2024-3-17 18:59
这个好  进程通信还是很实用的:噜阿噜
作者: xuwanbin    时间: 2024-3-18 11:17
如果是注入的DLL  没有窗口 是用不了发送消息的
作者: matali    时间: 2024-3-22 00:42
学习学习学习学习
作者: adm    时间: 2024-4-3 20:48
研究一下
作者: QQ_732D69    时间: 2024-4-6 18:29
RE: [开源]水淼·进程通讯类 - 使用投递消息方式构建进程读写... [修改]

作者: QQ_732D69    时间: 2024-4-6 18:30
RE: [开源]水淼·进程通讯类 - 使用投递消息方式构建进程读写... [修改]

作者: wq838339083    时间: 2024-4-6 20:18
RE: [开源]水淼·进程通讯类 - 使用投递消息方式构建进程读写... [修改]

作者: 888888    时间: 2024-4-6 20:46
谢谢分享
作者: quary888    时间: 2024-4-6 21:35
谢谢楼主分享!!!
好人一生平安!!!

作者: adrenminbi    时间: 2024-4-16 18:53
为真,则不管进程在哪个目录下运行的都能使用通道,否则只有同目录下的进程才能使用通道。  为真的情况没写代码么  不同目录下的程序通讯不了
作者: shuimiao    时间: 2024-4-16 21:36
adrenminbi 发表于 2024-4-16 18:53
为真,则不管进程在哪个目录下运行的都能使用通道,否则只有同目录下的进程才能使用通道。  为真的情况没写 ...

全局通道写了代码。但例程只是用了非全局通道。你要测试全局通道,就自己修改传入参数,全局通道为真,重新编译程序
作者: 飞丶宇    时间: 2024-4-16 21:39
  看看效果




欢迎光临 火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4