进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:

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

  另一个是地址空间,它包含所有的可执行模块或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. linux进程间Socket速率,用socketpair()进行进程间的全双工通讯

    用socketpair()进行进程间的全双工通讯 /************************************************* *  description: use sock ...

  2. linux命名管道进程间通信,Linux进程间通讯--命名管道

    IPC安全 前面总结了匿名管道,如今来看命名管道:因为匿名管道的一个限制就是:只能是有血缘关系的进程间才能够通讯,好比:有两个同祖先的子进程,父子进程等:为了突破这一个限制,想让没有任何关系的两个进程 ...

  3. 进程间基于消息队列的通信_Linux 进程间的通信方式

    (一)进程的概念 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就是创建一个进程,在这个 过程中伴随着资源的分配和释放,可以认为进程是一个程序的一次执行过程. (二)进程间通信的概念 ...

  4. 如何在进程间共享数据

    1.引言 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.WIN32 API提供了许多函数使我们能够方便高效的进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换,就如同 ...

  5. c++ 内存映射文件进程间共享数据

    int main(int argc, char *argv[])   {       //RecursiveDelete("C:\\20_128\\");       //Self ...

  6. android aidl调用进程间服务的方法

    我就拿最近做的项目来说明了,首先创建一个IFMService.aidl的接口文件,在R.java的目录下会自动生成IFMService.java 的文件, 接口文件的内容如下: package net ...

  7. Linux进程间同步和通信,linux进程间的同步方法

    进程间通讯(IPC)方法主要有以下几种: 管道/FIFO/共享内存/消息队列/信号 1.管道中还有命名管道和非命名管道(即匿名管道)之分,非命名管道(即匿名管道)只能用于父子进程通讯,命名管道可用于非 ...

  8. 进程间的通信方式 8种

    进程通信: 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从 ...

  9. 进程间的五种通信方式介绍

    两种共享内存机制的IPC介绍 https://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index1.html https://www.ibm.c ...

  10. linux open 头文件_linux下通过共享内存和mmap实现进程间通讯

    前言 最近在学习GNU/Linux内核,看到mmap的时候书上说: mmap/munmap接口函数是用户最常用的两个系统调用接口,无论是在用户程序中分配内存.读写大文件.链接动态库文件,还是多进程间共 ...

最新文章

  1. java拼接字符串 判断内容_java--字符串拼接比较
  2. (38)Spring Boot分布式Session状态保存Redis【从零开始学Spring Boot】
  3. MySQL 高级 - 输入参数
  4. 电子商务之网购魅力何在?(网购用户行为分析)
  5. YOLOv3 提升 5.91 mAP,IoU在目标检测中的正确打开方式
  6. 计算机视觉必备框架!Opencv系列学习实战
  7. linux移动文件_Linux基础
  8. 华为系统里的计算机,一个屏幕操作两个系统 让你的手机装进华为MateBook 14电脑里...
  9. (Greedy approach)Find longest word in dictionary that is a subsequence of a given string
  10. linux CP命令覆盖不提示方法
  11. (十四)java版spring cloud+spring boot+redis社交电子商务平台-在springboot中用redis实现消息队列...
  12. python加载mnist数据集
  13. Linux之shell编程的shell工具
  14. 中国省市SQL表---市级行政单位表
  15. 设为首页 加入收藏 html,JS设为首页和加入收藏的代码
  16. 【思考】关于英语论文写作的底层逻辑思考
  17. 全国计算机三级答案,全国计算机三级数据库技术笔试试题(附正确答案)
  18. Visual Studio 编译器修改IDE背景图片
  19. 自制表情包!android,PicsArt定制专属表情包-PicsArt表情包自制软件下载-乐游网安卓下载...
  20. TwinCAT与Step 7编程的区别

热门文章

  1. UWB电厂人员定位系统优势有哪些?
  2. phpcms php5.5,phpcms_v9.5.8_GBK源码下载
  3. Airtest微信朋友圈自动点赞
  4. 乐理知识以及musicXml属性介绍
  5. OpenWiFi简介与学习记录
  6. C++实现高质量游戏游戏!!!不点开你会后悔的!!!包括 买彩票游戏 勇者游戏 等 5个游戏
  7. 用Python实现微信撤回消息还原
  8. 通过物理地址查计算机,别人知道我查电脑的物理地址,怎么处理
  9. 【设计模式】-状态模式->APP抽奖活动(源码与类图解析)
  10. Postgis使用工具raster2pgsql批量导入栅格数据(一)