Windows下利用共享内存和事件对象实现进程间的通讯

    本来项目想用一个第三方数据处理库,结果不知道有什么冲突,第三方库编译的dll死活就是调用不了。想想干脆再把第三方库写成一个exe得了。之前对windows的IPC机制也不熟,估计跟linux也有很多相似的地方,就先实现个简单的模型。

    源代码:

    点击打开链接

    https://github.com/wrsjhhe/IPC_win

先说一下需求:

    1.在同一个计算机上,有两个进程,一个作为客户进程,一个作为服务进程;

    2.客户进程会把数据发送给服务进程做处理,然后服务进程把处理好的数据返回回来;

    3.数据量不确定,可能比较大;

    4.数据处理功能类型可能有多种;

    5.客户进程是一个命令处理完后才能发下一个命令。

实现方案:

    进程间的数据传输用共享内存来实现,进程间的同步用event来实现,这两个方式都是比较高效的;

    一个共享内存;

    两个event对象,一个是客户端用来给服务端发通知,一个是服务端把数据处理好了给客户端发通知;

    对两端的数据处理功能都用std::function来注册。

    由于是同步进行的,所以不需要多线程(如果有需求的话也可以增加多线程模块)

流程:

    1.首先服务进程建立一个共享内存,并把需要的功能以std::function注册到一个容器中保存,然后开启对命令事件的监听循环。

    2.然后客户进程开启,把命令与数据都写入共享内存中,然后主动触发发送事件,并开始监听数据返回事件。

    3.服务端监听到事件触发,开始处理,这时候两端都是阻塞的。直到数据处理完毕,把数据写入共享内存,触发数据返回事件。

    4.客户端接收到返回数据,回调事件处理数据,结束。

    单次循环的事件处理就是下面这个样子:

    

 


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值