进程之间的通讯

C++多进程之间通讯 是操作系统分配资源的基本单位,包括代码、数据和系统资源。每个进程都有自己独立的地址空间,因此进程之间不能直接访问彼此的内存。:是操作系统能够进行运算调度的最小单位。线程是进程的一个实体,是进程中的实际运行单位,线程拥有自己的堆栈和局部变量。线程之间可以直接访问彼此的内存。在 C++ 中,用于创建和管理线程,而不是进程。如果你需要创建进程,你可以使用std::async或者操作系统提供的 API,例如在 Unix 系统上使用fork()函数,或者在 Windows 系统上使用函数。 阅读详情

随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求。编写多进程 / 多线程程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的。 Microsoft Win32 API 提供了多种进程间通信的方法,全面地阐述了这些方法的特点,并加以比较和分析,希望能给读者选择通信方法提供参考。

 

1 进程与进程通信

进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源 ( 如文件、管道等 ) 组成。多进程 / 多线程是 Windows 操作系统的一个基本特征。 Microsoft Win32 应用编程接口 (Application Programming Interface, API) 提供了大量支持应用程序间数据共享和交换的机制,这些机制行使的活动称为进程间通信 (InterProcess Communication, IPC) ,进程通信就是指不同进程间进行数据共享和数据交换。
  正因为使用 Win32 API 进行进程通信方式有多种,如何选择恰当的通信方式就成为应用开发中的一个重要问题,下面本文将对 Win32 中进程通信的几种方法加以分析和比较。

 

 

2 进程通信方法

2.1 文件映射
  文件映射(Memory-Mapped Files) 能使进程把文件内容当作进程地址区间一块内存那样来对待。因此,进程不必使用文件I/O 操作,只需简单的指针操作就可读取和修改文件的内容。
  Win32 API 允许多个进程访问同一文件映射对象,各个进程在它自己的地址空间里接收内存的指针。通过使用这些指针,不同进程就可以读或修改文件的内容,实现了对文件中数据的共享。
  应用程序有三种方法来使多个进程共享一个文件映射对象。
  (1) 继承:第一个进程建立文件映射对象,它的子进程继承该对象的句柄。
  (2) 命名文件映射:第一个进程在建立文件映射对象时可以给该对象指定一个名字( 可与文件名不同) 。第二个进程可通过这个名字打开此文件映射对象。另外,第一个进程也可以通过一些其它IPC 机制( 有名管道、邮件槽等) 把名字传给第二个进程。
  (3) 句柄复制:第一个进程建立文件映射对象,然后通过其它IPC 机制( 有名管道、邮件槽等) 把对象句柄传递给第二个进程。第二个进程复制该句柄就取得对该文件映射对象的访问权限。
  文件映射是在多个进程间共享数据的非常有效方法,有较好的安全性。但文件映射只能用于本地机器的进程之间,不能用于网络中,而开发者还必须控制进程间的同步。
2.2
共享内存
  Win32 API 中共享内存(Shared Memory) 实际就是文件映射的一种特殊情况。进程在创建文件映射对象时用0xFFFFFFFF 来代替文件句柄(HANDLE) ,就表示了对应的文件映射对象是从操作系统页面文件访问内存,其它进程打开该文件映射对象就可以访问该内存块。由于共享内存是用文件映射实现的,所以它也有较好的安全性,也只能运行于同一计算机上的进程之间。
2.3
匿名管道
  管道(Pipe) 是一种具有两个端点的通信通道:有一端句柄的进程可以和有另一端句柄的进程通信。管道可以是单向-一端是只读的,另一端点是只写的;也可以是双向的一管道的两端点既可读也可写。
  匿名管道(Anonymous Pipe) 是在父进程和子进程之间,或同一父进程的两个子进程之间传输数据的无名字的单向管道。通常由父进程创建管道,然后由要通信的子进程继承通道的读端点句柄或写端点句柄,然后实现通信。父进程还可以建立两个或更多个继承匿名管道读和写句柄的子进程。这些子进程可以使用管道直接通信,不需要通过父进程。
  匿名管道是单机上实现子进程标准I/O 重定向的有效方法,它不能在网上使用,也不能用于两个不相关的进程之间。
2.4
命名管道
  命名管道(Named Pipe) 是服务器进程和一个或多个客户进程之间通信的单向或双向管道。不同于匿名管道的是命名管道可以在不相关的进程之间和不同计算机之间使用,服务器建立命名管道时给它指定一个名字,任何进程都可以通过该名字打开管道的另一端,根据给定的权限和服务器进程通信。
  命名管道提供了相对简单的编程接口,使通过网络传输数据并不比同一计算机上两进程之间通信更困难,不过如果要同时和多个进程通信它就力不从心了。
2.5
邮件槽
  邮件槽(Mailslots) 提供进程间单向通信能力,任何进程都能建立邮件槽成为邮件槽服务器。其它进程,称为邮件槽客户,可以通过邮件槽的名字给邮件槽服务器进程发送消息。进来的消息一直放在邮件槽中,直到服务器进程读取它为止。一个进程既可以是邮件槽服务器也可以是邮件槽客户,因此可建立多个邮件槽实现进程间的双向通信。
  通过邮件槽可以给本地计算机上的邮件槽、其它计算机上的邮件槽或指定网络区域中所有计算机上有同样名字的邮件槽发送消息。广播通信的消息长度不能超过400 字节,非广播消息的长度则受邮件槽服务器指定的最大消息长度的限制。
  邮件槽与命名管道相似,不过它传输数据是通过不可靠的数据报( 如TCP/IP 协议中的UDP 包) 完成的,一旦网络发生错误则无法保证消息正确地接收,而命名管道传输数据则是建立在可靠连接基础上的。不过邮件槽有简化的编程接口和给指定网络区域内的所有计算机广播消息的能力,所以邮件槽不失为应用程序发送和接收消息的另一种选择。
2.6
剪贴板
  剪贴板(Clipped Board) 实质是Win32 API 中一组用来传输数据的函数和消息,为Windows 应用程序之间进行数据共享提供了一个中介,Windows 已建立的剪切( 复制) -粘贴的机制为不同应用程序之间共享不同格式数据提供了一条捷径。当用户在应用程序中执行剪切或复制操作时,应用程序把选取的数据用一种或多种格式放在剪贴板上。然后任何其它应用程序都可以从剪贴板上拾取数据,从给定格式中选择适合自己的格式。
  剪贴板是一个非常松散的交换媒介,可以支持任何数据格式,每一格式由一无符号整数标识,对标准( 预定义) 剪贴板格式,该值是Win32 API 定义的常量;对非标准格式可以使用Register Clipboard Format 函数注册为新的剪贴板格式。利用剪贴板进行交换的数据只需在数据格式上一致或都可以转化为某种格式就行。但剪贴板只能在基于Windows 的程序中使用,不能在网络上使用。
2.7
动态数据交换
  动态数据交换(DDE) 是使用共享内存在应用程序之间进行数据交换的一种进程间通信形式。应用程序可以使用DDE 进行一次性数据传输,也可以当出现新数据时,通过发送更新值在应用程序间动态交换数据。
  DDE 和剪贴板一样既支持标准数据格式( 如文本、位图等) ,又可以支持自己定义的数据格式。但它们的数据传输机制却不同,一个明显区别是剪贴板操作几乎总是用作对用户指定操作的一次性应答-如从菜单中选择Paste 命令。尽管DDE 也可以由用户启动,但它继续发挥作用一般不必用户进一步干预。DDE 有三种数据交换方式:
  (1) 冷链:数据交换是一次性数据传输,与剪贴板相同。
  (2) 温链:当数据交换时服务器通知客户,然后客户必须请求新的数据。
  (3) 热链:当数据交换时服务器自动给客户发送数据。
  DDE 交换可以发生在单机或网络中不同计算机的应用程序之间。开发者还可以定义定制的DDE 数据格式进行应用程序之间特别目的IPC ,它们有更紧密耦合的通信要求。大多数基于Windows 的应用程序都支持DDE 。
2.8
对象连接与嵌入
  应用程序利用对象连接与嵌入(OLE) 技术管理复合文档( 由多种数据格式组成的文档) ,OLE 提供使某应用程序更容易调用其它应用程序进行数据编辑的服务。例如,OLE 支持的字处理器可以嵌套电子表格,当用户要编辑电子表格时OLE 库可自动启动电子表格编辑器。当用户退出电子表格编辑器时,该表格已在原始字处理器文档中得到更新。在这里电子表格编辑器变成了字处理器的扩展,而如果使用DDE ,用户要显式地启动电子表格编辑器。
  同DDE 技术相同,大多数基于Windows 的应用程序都支持OLE 技术。
2.9
动态连接库
  Win32 动态连接库(DLL) 中的全局数据可以被调用DLL 的所有进程共享,这就又给进程间通信开辟了一条新的途径,当然访问时要注意同步问题。
  虽然可以通过DLL 进行进程间数据共享,但从数据安全的角度考虑,我们并不提倡这种方法,使用带有访问权限控制的共享内存的方法更好一些。
2.10
远程过程调用
  Win32 API 提供的远程过程调用(RPC) 使应用程序可以使用远程调用函数,这使在网络上用RPC 进行进程通信就像函数调用那样简单。RPC 既可以在单机不同进程间使用也可以在网络中使用。
  由于Win32 API 提供的RPC 服从OSF-DCE(Open Software Foundation Distributed Computing Environment) 标准。所以通过Win32 API 编写的RPC 应用程序能与其它操作系统上支持DEC 的RPC 应用程序通信。使用RPC 开发者可以建立高性能、紧密耦合的分布式应用程序。
2.11 NetBios
函数
  Win32 API 提供NetBios 函数用于处理低级网络控制,这主要是为IBM NetBios 系统编写与Windows 的接口。除非那些有特殊低级网络功能要求的应用程序,其它应用程序最好不要使用NetBios 函数来进行进程间通信。
2.12 Sockets
  Windows Sockets 规范是以U.C.Berkeley 大学BSD UNIX 中流行的Socket 接口为范例定义的一套Windows 下的网络编程接口。除了Berkeley Socket 原有的库函数以外,还扩展了一组针对Windows 的函数,使程序员可以充分利用Windows 的消息机制进行编程。
  现在通过Sockets 实现进程通信的网络应用越来越多,这主要的原因是Sockets 的跨平台性要比其它IPC 机制好得多,另外WinSock 2.0 不仅支持TCP/IP 协议,而且还支持其它协议( 如IPX) 。Sockets 的唯一缺点是它支持的是底层通信操作,这使得在单机的进程间进行简单数据传递不太方便,这时使用下面将介绍的WM_COPYDATA 消息将更合适些。
2.13 WM_COPYDATA
消息
  WM_COPYDATA 是一种非常强大却鲜为人知的消息。当一个应用向另一个应用传送数据时,发送方只需使用调用SendMessage 函数,参数是目的窗口的句柄、传递数据的起始地址、WM_COPYDATA 消息。接收方只需像处理其它消息那样处理WM_COPY DATA 消息,这样收发双方就实现了数据共享。
  WM_COPYDATA 是一种非常简单的方法,它在底层实际上是通过文件映射来实现的。它的缺点是灵活性不高,并且它只能用于Windows 平台的单机环境下。

3 结束语

  Win32 API 为应用程序实现进程间通信提供了如此多种选择方案,那么开发者如何进行选择呢?通常在决定使用哪种IPC 方法之前应考虑以下一些问题:
  (1) 应用程序是在网络环境下还是在单机环境下工作。

 

 

 

 

 

 

 

 

 

内存共享:

    可想而知,如果物理内存只有一份,让这份内存在不同的进程中,映射到各自的虚拟地址空间上,每个进程都可以读取同一份数据,是一种最高效的数据交换方法。下面我们就讨论如何实现它。

共享内存在 Windows 中是用 FileMapping 实现的。我们可以用 CreateFileMapping 创建一个内存文件映射对象, CreateFileMapping 这个 API 将创建一个内核对象,用于映射文件到内存。这里,我们并不需要一个实际的文件,所以,就不需要调用 CreateFile 创建一个文件, hFile 这个参数可以填写 INVALID_HANDLE_VALUE 。但是,文件长度是需要填的。Windows 支持长达 64bit 的文件,但是这里,我们的需求一定不会超过 4G , dwMaximumSizeHigh 一定是 0 ,长度填在 dwMaximumSizeLow 即可( 以我们共享的数据类型的大小为准) 。然后调用 MapViewOfFile 映射到当前进程的虚拟地址上即可。一旦用完共享内存,再调用 UnmapViewOfFile 回收内存地址空间。

Windows 把 CreateFileMapping 和 MapViewOfFile 两个 API 分开做是有它的道理的。这是因为允许映射一个超过 4G 的文件,而地址空间最大只有 4G ( 实际上,一般用户的程序只能用到 2G) , MapViewOfFile 就可以指定文件的 Offset 而只映射一部分。

在 CreateFileMapping 的最后一个参数 pszName 填写一个名字,那么别的进程就可以用这个名字去调用 OpenFileMapping 来打开这个 FileMapping 对象,在新的进程内作映射。

 

Win32进程间通信实例(使用共享内存) 使用共享内存实现Win32进程之间的通信实例,程序中用到了Win32程序设计中常用到的semaphore, mutex等机制,老鸟请忽略.有问题交流请与本人E-mail联系, apt_kappa@sina.com 立即下载

相关推荐

Windows同步管道双向通信

建立两个管道。 实现管道的简单的双向通信。

Win32应用程序中进程间通信方法分析与比较(转)

Win32应用程序中进程间通信方法分析与比较作者:李志刚 纪玉波 程小茁 崔朝辉,引用本文供学习使用摘 要 随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求。编写多进程/多线程程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的。Microsoft Win32 API提供了多种进程间通信的方法,全面地阐述了这些方法的特点,并加以比较和分析,希望

设计模式空间 2888

windows 进程间通讯大全

进程间通讯大全

简记:关于windows进程间通信的各种方式对比(上)

<br />  晚上到现在,总算是搞懂了一些。。略微简记一下,等把剩下的东西也完全搞懂了,好好的用代码来感受一下各种通信方式的优劣。此乃后话,不多提也罢。。<br />    利用windows消息机制,向无窗体的线程发送消息来达到异步通信的方式一直没有搞定。。主要的原因是,1、windows默认的WM_COPYDATA不支持在异步环境下的通信。2、WM_COPYDATA在windows消息机制中是利用命名管道来传输数据。而我自定义的消息,无法(至少我没有做到)通过管道传输数据,仅仅是实现了基础数据传输,无

阶乘的闲庭信步 980

win32下进程间通信(共享内存)实例分析

一、概述 很多情况下在Windows程序中,各个进程之间往往需要交换数据,进行数据通讯。WIN32 API提供了许多函数使我们能够方便高效的进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换。 进程间通讯(即:同机通讯)和数据交换有多种方式:消息、共享内存、匿名(命名)管道、邮槽、Windows套接字等多种技术。“共享内存”(shared memory)可以定义为对一个以上的进程是可见的内存或存在于多个进程的虚拟地址空间。例如:如果两个进程使用相同的DLL,只把DLL的代码页装入内存一次,其他所有映射这个DLL的进程只要共享这些代码页就可以了;利用消息机制实现IPC虽然有交换的数据

团结引擎+OpenHarmony 2实战篇:从零构建鸿蒙应用开发环境

本文详细介绍了如何从零开始构建鸿蒙应用开发环境,重点讲解了团结引擎与OpenHarmony 2的实战配置步骤。内容包括DevEco Studio安装、OpenHarmony SDK配置、团结引擎集成及项目创建等关键环节,帮助开发者快速搭建高效的开发环境,提升鸿蒙应用开发效率。

weixin_29294395的博客 262

win32进程间通信方式(13种)

windows提供了很多进程间通信的方式,比较常用的有:文件映射、共享内存、匿名管道、命名管道、剪贴板、socket通信、动态链接库等。下面只对这些内容作简要介绍,如需深入了解,可自行在网上学习。

墨、砚 1104

231003-四步MacOS-iPadOS设置无线竖屏随航SideCar

新建虚拟屏幕参考文献。

专注机器学习之路 7485

「操作系统」进程间的通信方式全面解析

匿名管道顾名思义,它没有名字标识,匿名管道是特殊文件只存在于内存,没有存在于文件系统中,shell 命令中的「」竖线就是匿名管道,通信的数据是无格式的流并且大小受限,通信的方式是单向的,数据只能在一个方向上流动,如果要双向通信,需要创建两个管道,再来匿名管道是只能用于存在父子关系的进程间通信,匿名管道的生命周期随着进程创建而建立,随着进程终止而消失。命名管道。

frozenpenguin的博客 3969

redhawk-sc(seascape)学习日志2

design view是主view,是所有seascape view中最root的部分,一个design view可以驱动多种类型分析比如静态IR drop,动态IR drop以及EM.这些分析可以在不同的PVT和翻转率下.Design view是一个必须的view对于redhawk中的任何类型分析来说。seascape view相当于一个容器,用于保存各种和设计相关的数据,类似于逻辑信息、物理信息等等,每个view都有其对应的输入件和依赖,这些view都是redhawk用于各种类型的分析所需。

qq_39493558的博客 3497

视网膜血管分割数据集(DRIVE数据集,STARE数据集,REFUGE数据集,CHASE_DB1数据集,DiaRetDB1数据集)

在医学图像处理领域,视网膜图像分析对于眼部疾病的早期诊断与治疗具有举足轻重的意义。随着人工智能技术的蓬勃发展,尤其是深度学习算法在图像分割任务中的广泛应用,高质量的视网膜图像数据集成为推动该领域研究进展的关键要素。这些数据集不仅是训练和优化算法模型的基石,更是衡量算法性能优劣的重要依据。本文聚焦于视网膜图像分割领域,详细介绍 DRIVE、STARE、REFUGE、CHASE_DB1 以及 DiaRetDB1 这几个具有代表性的数据集。

weixin_43518285的博客 2270

Win32进程间通信简述

1. 消息 使用WM_COPYDATA消息及相应的结构体来实现进程间的通信。 特点: 只能用SendMessage函数来发送消息,不能用PostMessage或PostThreadMessage来发送消息,所以只能是同步,不能异步通信; 由于使用的SendMessage,所以只能用于窗口间的通信; 传输的数据中不能含有指针,因此,C++的带有虚函数类的对象不能传输,以及很多STL容器也不能传输。 2. 共享内存 使用win32的相关函数创建共享内存来实现进程间通信,上述的消息方法内部就是使用的

zhjs_abc的博客 702

建议收藏:华为海思IC设计笔试题,含解析(附下载)

接触过的部门有麒麟芯片、CPU/GPU,总体面试感觉非常好,规范且认真,第一轮手撕代码状态机+复盘机考题+瞄准几个知识点深挖,时间1hour+;一二轮面试是连着的,所以很累。但是岗位就那么多,在面试的时候,很多同学因为准备不充分,与岗位失之交臂,无缘进入该公司。时序电路有记忆功能,不会产生锁存器,锁存器一般在组合逻辑中case写不全,else写不全,或者敏感列表写不全。

nuoweishizi的博客 3287

研究Electron主进程、渲染进程、webview之间的通讯

背景 由于某个Electron应用,需要主进程、渲染进程、webview之间能够互相通讯。 不过因为Electron仅提供了主进程与渲染进程的通讯,没有渲染进程之间或渲染进程与webview之间通讯的办法,所以只能寻找其他方案来解决。 研究一:ipcMain/ipcRenderer Electron主进程与渲染进程的通讯,就是用ipcMain/ipcRenderer这两个对象。 ...

weixin_30878361的博客 792

从零开始:ENSP与VirtualBox的兼容性迷宫与突围指南

本文深入解析eNSP与VirtualBox的兼容性问题,特别是报错40的解决方案。从诊断根源、彻底卸载残留到推荐黄金版本组合,提供了一套完整的实战指南,帮助网络工程师和技术学习者快速解决AR_Base等设备的启动故障,优化虚拟化环境性能。

weixin_29284885的博客 476

嵌入式开发之瑞芯微RK356x--基本环境搭建

嵌入式环境搭建

NexyHO的博客 617

Binder机制——ServerManager进程 与 应用进程之间的通讯

ServerManager 进程 与 App 进程之间通讯 通过上节 “Binder 的原理”,我们已经搞清楚了:应用进程中,直接经过 Binder 驱动的桥梁,根据 Binder的 名称 ,从 ServerManger 进程中,获取所需Binder 的代理,从而完成了跨进程通信。 其实,仔细想来,这个过程,准确的说,是完成了2次跨进程的通信 1.应用进程 和 所需要通讯的进程之间 2. 应用进...

BoyiKia的博客 434

人工智能数据治理——解读AI时代数据治理白皮书 2025【附全文阅读】

摘要:该白皮书面向企业数字化负责人及AI项目推进人员,探讨AI时代数据治理的战略升级。提出"好数据+好数据知识"双基石理念,强调数据需满足"三高"标准(高精度、一致性、时效性)并构建语义知识库。构建四层治理框架,包括数据采集处理、合规安全、知识库建设及质量改进,并介绍AI赋能治理的新范式,如智能ETL和治理Agent体系。同时分析"软件+AI+好数据"的应用模式,为企业实现智能数据治理提供实践指导。(149字)

cdfunlove的博客 633

Winform 进程之间通讯的几种方法

进程之间通讯的几种方法: 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有: 使用内存映射文件 通过共享内存DLL共享内存 使用SendMessage向另一进程发送WM_COPYDATA消息 比起前两种的复杂实现来,WM_COPYDATA消息无疑是一种经济实惠的一中方法.(ZT) WM_COPYDATA消息的主要目的是允许在进程间传递只读数据。Windo

星火燎猿 7962

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

利用管道技术在两个进程之间通讯.

我现在正在做一个基于P2P的通讯工具,需要用到关于两个进程之间传递信息的技术,所以想到了管道技术,下面是源代码,有时间在做分析.服务器端:(无法自己关闭,需要给其发中断信号.)#include #include #include #include #include #include #include #define FIFO_FILE "/tmp/sampleFIFO"int main(){   

IT老兵 1098

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C# 进程之间的通讯

该方法针对同一台服务器上的2个进程之间的通讯,进程A是一个实时采集程序,可能由于某个异常或运行时间过长导致程序卡死,现需要启动另外一个进程B来对 进程A进行定时监控,如果发现A卡死或无故退出,则自动启动进程A。 进程A的代码如下: public struct COPYDATASTRUCT { public IntPtr dwData; ...

weixin_33695450的博客 1340

Python进程之间通讯

job_process = [multiprocessing.Process(target=worker, args=(mgr_list, item,), name="数据操作进程-%s" % item)job_process = [multiprocessing.Process(target=worker, args=(mgr_dict, item,), name="数据操作进程-%s" % item)mgr_list = manager.list([main_item]) # 根据一个序列来创建列表。

softshow1026的博客 163

C#中多进程之间的通讯方式

c#的多进程通讯呢,大致上是分为这几类的,共享内存,借助Windows的MSMQ消息队列服务,以及命名管道和匿名管道,以及IPC HTTP TCP的Channel的方式,还有常用的Socket,借助Win32的SendMessage的Api来实现多进程通讯,还有最后一种就是多进程之间的信号量相关的Mutex

那里有颗树 1029

eVC编程遇到的各种问题之——进程之间的通讯

在做个程序,要读取串口数据、提取、分析、显示。在程序执行时要调用串口程序,因此要读取到串口进程的数据。这就涉及了所谓进程间的通讯了~~ 进程间的通讯方法有多种,就选了个比较简单的,发送COPYDATA消息的方法来实现。调用串口进程后,每每串口接收到数据后,向主进程发送COPYDATA消息,主进程在接到消息后进行处理。 现在将遇到的问题和解决的办法总结下~~备忘…… 问题一:

TT的小窝 919

进程之间通讯的几种方法

在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有使用内存映射文件通过共享内存DLL共享内存使用SendMessage向另一进程发送WM_COPYDATA消息比起前两种的复杂实现来,WM_COPYDATA消息无疑是一种经济实惠的一中方法.WM_COPYDATA消息的主要目的是允许在进程间传递只读数据。Windows在通过WM_COPYDATA消息传递期间,

南京程序员俱乐部 2598
上一篇: 多线程
下一篇: 同步、异步、阻塞和非阻塞的概念
dadahacker
博客等级 码龄20年 78粉丝 120原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值