CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

进程间通讯问题,内存共享的实现

楼主domustdohz(迷茫)2005-09-26 20:54:19 在 VC/MFC / 进程/线程/DLL 提问

需要在多个进程间传输数据,其中只有一个进程写数据,其他的进程读数据。  
  数据块大概1M左右(小于1M),不是特别大,但是数据更新很频繁。  
  由于效率问题排除通过文件共享的方式,暂时决定采用内存共享的方式实现。  
  希望各位大虾多加指点。具体怎么实现比较好?能不能采用COM的远程过程调用的方式实现?  
  需要注意哪些地方?如果有类似的源代码参考就最好了。  
   
  问题点数:200、回复次数:12Top

1 楼xjsean(绿色速度)回复于 2005-09-26 21:58:08 得分 20

用邮槽通信能够满足你的要求!发送数据的当服务器端,接受数据的当客户端!Top

2 楼lonely001(独行客)回复于 2005-09-26 22:08:40 得分 20

用内存映射,效率很高的。  
  写进程创建一个命名的内存映射,并具有写权限。  
  其他进程则用OpenFileMapping函数打开指定命名的内存影射,并读取数据。Top

3 楼duyhui(一天到晚游泳的鱼)回复于 2005-09-26 22:27:36 得分 20

楼主看看  
  http://www.yesky.com/20030117/1649013.shtml  
  不错的内存共享的讲解Top

4 楼li_guang_hua(无声胜有声)回复于 2005-09-26 23:45:20 得分 20

管道也可  
  Top

5 楼zxyjyzxyjy(猜)回复于 2005-09-27 09:27:40 得分 20

数据块大概1M左右(小于1M),不是特别大,但是数据更新很频繁。  
  由于效率问题排除通过文件共享的方式,暂时决定采用内存共享的方式实现。  
   
  我认为,用内存映射是好的选择,更新再频繁也不会影响效率,本人曾经用过,几十M都非常快,何别把简单问题复杂化呢。Top

6 楼jerry_dqh(1.44M)回复于 2005-09-27 11:07:07 得分 20

内在映射不错,我也用的这个,效率很高,我的是仿真实验用的,数据量也是很大,祝楼主好运!Top

7 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-09-27 11:33:16 得分 20

filemapping效率比较高Top

8 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-09-27 11:41:36 得分 30

用内存映射  
   
  创建  
  HANDLE   hMap   =   CreateFileMapping(INVALID_HANDLE_VALUE,   NULL,  
  PAGE_READWRITE,   0,   10*1024*1024,   "mydatamap");  
  if   (hMap   ==   INVALID_HANDLE_VALUE)  
  {  
  hMap     =   OpenFileMapping(FILE_MAP_ALL_ACCESS,   FALSE,      
  "mydatamap");  
  }  
   
  读写  
  TCHAR*   pData   =   (TCHAR*)MapViewOfFile(hMap     ,   FILE_MAP_ALL_ACCESS,   0   ,0,   0);  
  if   (pData)  
  {  
                  _tcscpy(pData,   "啊啊啊啊啊啊");  
  }  
  UnmapViewOfFile(hMap);  
  关闭  
  CloseHandle(hMap);  
  Top

9 楼mythma(~a za, a za,fighting!fighting!fighting!fighting!fi)回复于 2005-09-27 11:49:16 得分 15

看来都是用内存映射了  
  PAFMW里面讲的很详细。Top

10 楼domustdohz(迷茫)回复于 2005-09-27 13:12:51 得分 0

多谢各位了!  
  我看了一下,内存映射是比较合适的实现方式,CreateFileMapping可以不需要文件。  
  采用内存映射方式,将访问共享内存的操作集中在一个DLL中进行处理。然后,不同的  
  进程通过加载该DLL库就可以访问共享内存了。  
  恩!看来也没必要用COM的方式了。  
  实现过程需要有些什么特别需要注意的吗?各位多加指点。Top

11 楼laiyiling(陌生人[MVP])回复于 2005-09-27 13:49:46 得分 15

http://61.186.252.131/Expert/topic/2435/2435616.xml?temp=.5463983Top

12 楼zhoujiamurong(有分俺就不要,俺要知识)回复于 2006-05-16 13:04:20 得分 0

markTop

相关问题

  • 求 delphi进程间通讯例子,自定义消息传递或共享内存区!
  • 有关内存管理,操作的问题(多进程共享的内存,...)
  • 进程间如何实现内存共享?
  • #pragma data_seg进程间内存共享问题
  • Linux下进程间共享内存的程序问题
  • 进程间传递数据块,共享内存吗?
  • unix下怎样进行进程间通讯,共享资源等。
  • 用共享内存在进程间传送结构体的问题
  • 请问ASP 3 能够实现不同的进程间共享内存吗?
  • 怎样共享COM服务的内存?(作成进程外服务)

关键词

  • 内存
  • 映射
  • 数据
  • 文件
  • 共享
  • 进程
  • hmap
  • 实现
  • 效率
  • 频繁

得分解答快速导航

  • 帖主:domustdohz
  • xjsean
  • lonely001
  • duyhui
  • li_guang_hua
  • zxyjyzxyjy
  • jerry_dqh
  • oyljerry
  • goodboyws
  • mythma
  • laiyiling

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo