用共享内存进行进程间通信,如何在共享内存里建立一个消息队列?
我需要在共享内存里建立一个消息队列进行进程间通信,而且是作成一个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




