CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

用共享内存进行进程间通信,如何在共享内存里建立一个消息队列?

楼主chenDaSha(DayDayUpMan)2003-08-03 16:55:05 在 VC/MFC / 进程/线程/DLL 提问

我需要在共享内存里建立一个消息队列进行进程间通信,而且是作成一个DLL,多个程序调用该dll,从共享内存里的消息队列读入读出消息。小弟的困惑在于:  
    如何在共享内存里建立一个消息队列?我写了一个队列操作的类(CQueue   myQueue),各个应用程序调用dll的时候调用一个myQueue.push(CMsg   myMsg)进行入队,那么这个myQueue对象必须对所有调用dll的程序是全局的,我想只能写在共享内存里面,怎么实现?  
  问题点数:100、回复次数:5Top

1 楼windbells(风铃)回复于 2003-08-03 19:48:13 得分 10

把各个类的CQueue类里的队列指针指向共享内存,不过需要所有的应用程序里共享CQueque类的实现,操作时通过共享内存保存的hEvent句柄或用循环锁来进行互斥访问(要把整个类完全映射到shared   memory里好象很困难,因为还要涉及到vtable,和代码段的一些问题,而且这样对其他的程序来说还是要知道CQueue的实现)Top

2 楼chenDaSha(DayDayUpMan)回复于 2003-08-03 23:17:12 得分 0

"需要所有的应用程序里共享CQueque类的实现"是什么意思呢,能不能讲详细一点,谢谢Top

3 楼Congy(少侠)回复于 2003-08-04 01:22:40 得分 5

就是其他应用程序要知道你存储的队列的格式,这样在内存内容转换时可以转换到你制定的队列类,就可以使用了,不过如果其他应用不知道那就行不通了。Top

4 楼peon(加菲-加菲 一只特立独行的猫)回复于 2003-08-04 10:58:12 得分 5

你要在共享内存里面建立合适的数据结构  
  然后互斥对其的访问  
   
  但是替代的方法很多!~  
  使用ms   的   quene   是最简单的方法,是一个消息队列中间件  
  Top

5 楼bigrongshu(Life is full of possibilities)回复于 2003-08-06 14:15:24 得分 80

你的queue类其实是逻辑的,物理上都是node结构,所以你只要把队列头尾放在共享内存区,然后其他程序读取就可以获得队列对象了Top

相关问题

  • 有关内存管理,操作的问题(多进程共享的内存,...)
  • 进程间如何实现内存共享?
  • #pragma data_seg进程间内存共享问题
  • Linux下进程间共享内存的程序问题
  • 进程间通讯问题,内存共享的实现
  • 进程间传递数据块,共享内存吗?
  • 用共享内存在进程间传送结构体的问题
  • 请问ASP 3 能够实现不同的进程间共享内存吗?
  • 怎样共享COM服务的内存?(作成进程外服务)
  • 如何通过Memory-Mapped Files在多个进程之间共享内存?

关键词

  • 内存
  • 应用程序
  • 消息
  • dll
  • 队列
  • 共享内存
  • cqueue
  • 调用
  • myqueue
  • 建立

得分解答快速导航

  • 帖主:chenDaSha
  • windbells
  • Congy
  • peon
  • bigrongshu

相关链接

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

广告也精彩

反馈

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