精易论坛
标题: 进程通信方法之文件映射 [打印本页]
作者: 龙渊 时间: 2024-12-6 23:21
标题: 进程通信方法之文件映射
前言:
写这个源码是自己写的一个易程序,需要调用Python处理一些东西,易语言做界面程序,看到初级办法就是写入文件,双方读取文件进行通信,由于涉及I/O操作,感觉效率比较低,就改进了一下,通过调用windows API函数进行实现。【这里就都用易语言实现了】
通过调用Win32 API中共享内存方法实现,实际就是文件映射的一种特殊情况。就是利用进程在创建文件映射对象时用0xFFFFFFFF来代替文件对象句柄(HANDLE),其它进程打开该文件映射对象就可以访问该内存区域。只能运行于同一计算机上的进程之间。
实现思路:
创建方(服务端)- 创建共享文件对象CreateFileMapping(映射文件对象句柄,安全保护,访问权限,对象大小,共享内存大小,映射文件名称)(注意:映射文件名双方必须一致)
- 共享文件对象映射到本进程内存地址MapViewOfFile(共享内存地址,访问权限,文件映射起始偏移的高位,文件映射起始偏移的低位, 映射文件的字节数)(一般情况:填写共享内存地址和访问权限即可,其他参数默认置0)
- 创建事件CreateEventW(事件对象继承,手动重置,初始状态,事件对象名称)用于不同进程间的同步【信号灯事件】
连接方(客户Duan)- [color=rgba(0, 0, 0, 0.75)]打开共享文件对象 OpenFileMappingA(访问权限,对象句柄继承,映射文件名)
- 共享文件对象映射到本进程内存地址MapViewOfFile(共享内存地址,访问权限,文件映射起始偏移的高位,文件映射起始偏移的低位, 映射文件的字节数)
- 创建事件同样数量的事件CreateEventW(事件名称要与服务端一致)。在创建事件时系统就会发现这个事件已经被另一方创建过,就直接将创建好的句柄返回来。实现进程同步读取
进程同步:例如 现有俩个事件分别是get_read和get_wri;
初始状态get_read和get_wri事件的信号灯都是灭的。先启动创建方,然后启动连接方时,在初始化时将创建方的get_wri事件的信号灯点亮,这样创建方获得信号灯就可以直接写入共享内存中并将get_read灯点亮将get_wri灯弄灭。然后连接方获得get_read灯亮就可以读取共享内存中的数据,读取完毕后再将get_read灯弄灭将get_wri灯点亮。这样就实现了进程间的通讯。
最后,上面资料来自MSDN查阅函数和CSDN博客资料),非常感谢提供例子,代码自行理解写的,如有不足,欢迎大佬指点改进。

软件截图:
关键代码:
1.服务端
2.客户Duan
不想写dll了,直接调用了精易模块,自备模块吧
test_服务端.e
(1.72 MB, 下载次数: 66)
test_客户Duan.e
(12.66 KB, 下载次数: 65)
作者: 汉族 时间: 2024-12-6 23:25
支持一个 点赞先
作者: 灵海雪缘 时间: 2024-12-7 00:51
进程通信方法之文件映射


作者: 浩蛋 时间: 2024-12-7 02:11
支持一个 点赞先
作者: pshq123 时间: 2024-12-7 04:42



作者: renhe2018 时间: 2024-12-7 07:38
这简直是太强大啊
作者: qwe111qwe 时间: 2024-12-7 08:00
感谢分享!!!!
作者: ensurf 时间: 2024-12-7 08:02
#在这里快速回复#支持开源~!感谢分享
作者: zhangyazhou123 时间: 2024-12-7 08:25
#在这里快速回复#支持开源~!感谢分享
作者: 何浩文 时间: 2024-12-7 11:01
支持开源~!感谢分享
作者: 一指温柔 时间: 2024-12-7 15:44
感谢分享
作者: 追梦11177012 时间: 2024-12-7 16:43
支持开源~!感谢分享
作者: hujie789 时间: 2024-12-7 17:10
感谢发布原创作品,精易因你更精彩!
作者: cf2006a 时间: 2024-12-7 19:21
收藏留着备用
作者: 夏亿 时间: 2024-12-7 21:01
感谢分享
作者: yu520 时间: 2024-12-7 22:32
收藏需要再来
作者: plt1111 时间: 2024-12-8 01:08
支持开源~!感谢分享
作者: lijiahao123 时间: 2024-12-8 08:39
感谢分享!!!!
作者: year1970 时间: 2024-12-8 10:00
感谢分享
作者: 17097575755 时间: 2024-12-8 17:06
感谢分享啊啊
作者: bianyuan456 时间: 2024-12-8 22:21
已经顶贴,感谢您对论坛的支持!
作者: qwe111qwe 时间: 2024-12-9 07:12
感谢分享!!!!
作者: 小虎来了 时间: 2024-12-9 08:44
感谢分享
作者: please 时间: 2024-12-9 09:38
感谢分享,支持开源!!!
作者: alanwoo 时间: 2024-12-9 10:14
学习学习
作者: wjswzj0 时间: 2024-12-9 10:15
感谢分享
作者: kyo9766 时间: 2024-12-9 14:10
新技能,感谢分享,很给力!~
作者: yezirun888 时间: 2024-12-15 20:29
666666666666666666666666666666666666666666666666666666666666666
作者: dodge123 时间: 2024-12-24 11:00
支持开源~!感谢分享
作者: jhwydcf 时间: 2025-5-22 11:41
支持一个 点赞先
作者: ntuzyq 时间: 2025-6-14 00:57
支持开源~!感谢分享
作者: opq123 时间: 2025-6-14 13:33
感谢分享,很给力!~
作者: dengbo168 时间: 2025-6-16 12:19
好东西,分享谢谢
作者: dengbo168 时间: 2025-6-16 12:29
dengbo168 哈哈
作者: dengbo168 时间: 2025-6-16 12:30
dengbo168 你哈
作者: dengbo168 时间: 2025-6-16 12:30
这个东西怎么样呀!@@@@@@
作者: 在看风云 时间: 2025-6-26 11:06
6666666666666666666
欢迎光临 精易论坛 (https://125.confly.eu.org/) |
Powered by Discuz! X3.4 |