当前位置:  开发笔记 > 编程语言 > 正文

在Windows下使用共享内存.如何传递不同的数据

如何解决《在Windows下使用共享内存.如何传递不同的数据》经验,为你挑选了2个好方法。

我目前尝试使用Windows CreateFileMapping机制实现一些进程间通信.我知道我需要首先使用CreateFileMapping创建文件映射对象,然后使用MapViewOfFile创建指向实际数据的指针.然后,该示例使用CopyMemory将数据放入mapfile.

在我的应用程序中,我有一个图像缓冲区(1 MB大),我想发送到另一个进程.所以现在我查询指向图像的指针,然后将整个图像缓冲区复制到mapfile中.但我想知道这是否真的有必要.是不是可以只在共享内存中复制指向图像缓冲区数据的实际指针?我尝试了一下但没有成功.



1> Zifre..:

不同的进程有不同的地址空间.如果将一个进程中的有效指针传递给另一个进程,它可能会指向第二个进程中的随机数据.所以你必须复制所有数据.


@ RandomNickName42:除共享内存外,对于所有常见操作系统通常都是如此.

2> Jason S..:

强烈建议你使用Boost :: interprocess.它有很多好处来管理这种东西,甚至还包括一些特殊的Windows功能,以防你需要与使用特定Win32功能的其他进程进行互操作.

最重要的是使用偏移指针而不是常规指针.偏移指针基本上是相对指针(它们存储指针所在位置和指向的位置之间的差异).这意味着即使两个指针映射到不同的地址空间,只要映射结构相同,那么你就可以了.

我已经使用了各种复杂的数据结构和偏移智能指针,它就像一个魅力.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有