转载:
https://www.cnblogs.com/swunield/articles/3893250.html
进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:

一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方

另一个是地址空间,它包含所有的可执行模块或DLL模块的代码和数据。它还包含动态分配的空间。如线程堆栈和堆分配空间。每个进程被赋予它自己的虚拟地址空间,当进程中的一个线程正在运行时,该线程可以访问只属于它的进程的内存。属于其它进程的内存则是隐藏的,并不能被正在运行的线程访问。

为了能在两个进程之间进行通讯,由以下几种方法可供参考:

1、剪贴板Clipboard: 在16位时代常使用的方式,CWnd中提供支持

2、窗口消息 标准的Windows消息以及专用的WM_COPYDATA消息 SENDMESSAGE()接收端必须有一个窗口

3、使用共享内存方式(Shared Memory)

a.设定一块共享内存区域

HANDLE CreateFileMapping(HANDLE,LPSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD, LPCSTR)

产生一个file-mapping核心对象

LPVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAcess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
DWORD dwNumberOfBytesToMap
);

得到共享内存的指针

b.找出共享内存

决定这块内存要以点对点(peer to peer)的形式呈现每个进程都必须有相同的能力,产生共享内存并将它初始化。每个进程
都应该调用CreateFileMapping(),然后调用GetLastError().如果传回的错误代码是ERROR_ALREADY_EXISTS,那么进程就可以假设这一共享内存区 域已经被别的进程打开并初始化了,否则该进程就可以合理的认为自己 排在第 一位,并接下来将共享内存初始化。

还是要使用client/server架构中只有server进程才应该产生并初始化共享内存。所有的进程都应该使用

HANDLE OpenFileMapping(DWORD dwDesiredAccess,
BOOL bInheritHandle,
LPCTSTR lpName);

再调用MapViewOfFile(),取得共享内存的指针

c.同步处理(Mutex)

d.清理(Cleaning up) BOOL UnmapViewOfFile(LPCVOID lpBaseAddress);

CloseHandle()

4、动态数据交换(DDE)通过维护全局分配内存使的应用程序间传递成为可能

其方式是再一块全局内存中手工放置大量的数据,然后使用窗口消息传递内存 指针.这是16位WIN时代使用的方式,因为在WIN32下已经没有全局和局部内存 了,现在的内存只有一种就是虚存。

5、消息管道(Message Pipe)

用于设置应用程序间的一条永久通讯通道,通过该通道可以象自己的应用程序访问一个平面文件一样读写数据。

匿名管道(Anonymous Pipes)

单向流动,并且只能够在同一电脑上的各个进程之间流动。

命名管道(Named Pipes)

双向,跨网络,任何进程都可以轻易的抓住,放进管道的数据有固定的格 式,而使用ReadFile()只能读取该大小的倍数。

可以被使用于I/O Completion Ports

6、邮件槽(Mailslots)

广播式通信,在32系统中提供的新方法,可以在不同主机间交换数据,在 WIN9X下只支持邮件槽客户

7、Windows套接字(Windows Socket)

它具备消息管道所有的功能,但遵守一套通信标准使的不同操作系统之上的应 用程序之间可以互相通信。

8、Internet通信 它让应用程序从Internet地址上载或下载文件

9、RPC:远程过程调用,很少使用,因其与UNIX的RPC不兼容。

10、串行/并行通信(Serial/Parallel Communication)

它允许应用程序通过串行或并行端口与其他的应用程序通信

11、COM/DCOM通过COM系统的代理存根方式进行进程间数据交换,但只能够表现在对接口 函数的调用时传送数据,通过DCOM可以在不同主机间传送数据。

C++进程间通信的十一种方法相关推荐

  1. VC++中进程间相互通信的十一种方法

    进程通常被定义为一个正在运行的程序的实例,它由两个部分组成: 一个是 操作系统用来管理进程的内核对象.内核对象也是系统用来存放关于进程的统计信息的地方 另一个是地址空间,它包含所有的可执行模块或DLL ...

  2. 防御DDoS攻击的十一种方法

    对于遭受DDoS攻击的情况是让人很尴尬的,如果我们有良好的DDoS防御方法,那么很多问题就将迎刃而解,我们来看看我们有哪些常用的有效地方法来做好DDoS防御呢. 对于DDoS防御的理解: 对付DDoS ...

  3. 高中数学:求数列通项公式的十一种方法(方法全,例子全,归纳细)

    本文作者:vxbomath 大家好,今天讲解高中数学数列通项的 11 种方法其中三个方法:累加法. 累乘法. 待定系数法.下面跟随我一起来来看看. 一接下来我们就开始数列解题--累加法 二.接下来我们 ...

  4. 管道半双工通信程序linux,Linux进程间通信的几种方法-半双工管道,命名管道,消息队列...

    1.半双工管道 简单实现 半双工管道可以实现父进程和子进程之间或者子进程之间(前提是有共同的祖先)的通信 因为是半双工,所以两端不可能同时读取,而是一端读一端取,而且当一端分配到读任务后,那么他就固定 ...

  5. 无线路由实战(一):增强无线wifi信号和加速wifi的十一种方法

    有些时候,无限wifi连接不上,连上信号不好,时断时连,下面我总结了十种方式,用以解决wifi信号问题.一下是在TP-link路由器上做的实验,其他品牌请参看说明书. 1.      路由MTU调试, ...

  6. 第十七篇:汇总,删除String中的指定字符的11种方法

    文章目录 方法一 方法二 方法三 方法四 方法五 方法六 方法七 方法八 方法九 方法十 方法十一 尾声 方法一 第一种方法 – 通过循环从前往后遍历,如果不是要删除的字符则加到处理后的字符串中,代码 ...

  7. linux如何创建共享内存,linux实现共享内存同步的四种方法

    https://blog.csdn.net/sunxiaopengsun/article/details/79869115 本文主要对实现共享内存同步的四种方法进行了介绍. 共享内存是一种最为高效的进 ...

  8. Linux+Qt 下同一数据空间vfork多进程间通信的一种高效便捷方式(信号槽直接调用)

    Linux+Qt 下同一数据空间vfork多进程间通信的一种高效便捷方式(信号槽直接调用) 概述 传统的多进程间通信往往非常麻烦,采用的方法比如管道,共享内存,socket,文件等,大都非常繁琐, 1 ...

  9. 哪些情况是友情链接作弊?总结了11种方法!

    相信大多数SEO人员都知道有友链这么一个名词,那么如何做友链? 如何做好友链却很少有人知道.做友链有很多渠道,使用的比较多的有两个. 第一个渠道是友链交换平台:(爱链)(换链神器) 第二个渠道是QQ里 ...

  10. python语言入门自学-自学编程的6种方法,自学Python

    随着互联网日趋迅猛,编程已经在我们生活当中无处不在了.众所周知,程序员的工资都很不错,于是越来越多的人,都想加入到编程的行业中来.那么如何加入到程序员的行业当中? PHP从入门到放弃,C语言从入门到放 ...

最新文章

  1. 青少年编程竞赛交流群周报(第038周)
  2. 基于Pytorch再次解读ResNet现代卷积神经网络
  3. 回炉重造-基础规则之类和对象
  4. linux 内核 死锁 检查,一种linux内核自旋锁死锁检测报告系统和方法与流程
  5. 信息检索及信息过滤方法概述
  6. 华数大数据平台解决方案
  7. 华为路由器 android,华为智能路由器app
  8. s7 200 java_java android 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC...
  9. 面向.NET开发人员的Dapr——入门
  10. 常用的JPA标记 (转)
  11. 《Reids 设计与实现》第十一章 服务器
  12. 每 1000 行代码有 14 个安全缺陷,开源软件的安全令人堪忧
  13. cnpm安装失败及解决方案
  14. Windows界面编程_Miniblink(6) 个人信息界面
  15. ios动态创建类Class
  16. 大事件!35的程序员竟然失去了面试资格,这是为什么?
  17. 中文金融领域情感词典构建
  18. nodpad 设置护眼_最详细的保护眼睛的方法,总有一个适合你。
  19. 陶教授,我记不住定理的证明该怎么办?(我看到陶哲轩在博客上与学生一则有意思的互动,就翻译过来了)...
  20. Cookie、Session 简述

热门文章

  1. python爬虫爬取拉勾网招聘信息
  2. 把数字翻译成字符串——python
  3. 二.LVGL学习——(lv_obj基础对象)
  4. layui设置td宽度_layui静态表格固定td宽度,table固定td宽度
  5. 【coq】函数语言设计 笔记 07 - indProp
  6. 一般app测试的最佳方法
  7. 椭圆曲线密码体制算法C语言,椭圆曲线密码的C语言设计与实现
  8. 超级计算机作文230字,我想养小兔子二年级作文230字
  9. Linux使用adsl计时制分享(转)
  10. Pandas 那些年踩过的坑