请教内存共享问题?
两个程序同时运行,一个程序会生成一些对象给另一个程序,数目是动态的。我想通过内存共享来做。一个程序写这些对象,另一个来读。关键是这些对象是动态分配出来的(个数不定)而且,对象有指针成员变量(也是动态分配出来的)。我想用MapViewOfFile来产生这些指针成员,但是我不能保证在这两个程序中这些指针都是一样有效的。请问有什么好的方法。
问题点数:100、回复次数:8Top
1 楼netcoder(朱二)回复于 2002-05-01 21:39:21 得分 20
给你一个例子,给我EMAILTop
2 楼xqing157(枭清)回复于 2002-05-02 08:37:34 得分 0
xqing@telekbird.com.cnTop
3 楼xqing157(枭清)回复于 2002-05-02 09:15:14 得分 0
我想解决的问题是:
我跟踪vc程序的每个函数的每条分支,将其运行情况纪录下来。
(我以前的方法是每个函数都自动声明一个静态对象,并在静态对象的析构函数里将运行记录写到一临时文件中,这样的缺点是,所运行的程序必须正常退出后才会写文件,不能实时显示)
我自己的一个程序将上面程序的运行记录读出来,并显示出来.运行过的分支用不同颜色显示出来(就像truecoverage那样)。
现在我想用内存共享或者别的什么方法来实现能够实时纪录执行情况。
各位高手请在百忙之余帮我考虑一下这个技术难题(至少我这么认为)。小的真的是万分感激,从内心的。我翻了3天的资料也没想到很好的办法。(资质有限)Top
4 楼waiwaiwai(我总不明白)回复于 2002-05-02 09:48:59 得分 20
WM_COPYDATATop
5 楼xqing157(枭清)回复于 2002-05-02 10:04:39 得分 0
我那些对象里有指针的,而且是动态分配出来的。
WM_COPYDATA好像不行吧。Top
6 楼kugle(kugle)回复于 2002-05-02 14:22:37 得分 20
共享内存是完美的解决方案
不过你需要控制多线程访问同一数据区,同步的问题。
你可以用mutex来互斥访问!
关于你说的那个问题。可以定义一个结构来存放你需要的信息,将这个结构写在共享内存的前面。
每个线程访问该区域时都该首先读取该区域。Top
7 楼RodgerLiang(老狼)回复于 2002-05-02 18:07:38 得分 20
利用VC的Serialize功能:
1. 把你的共享数据定义成Cobject的子类。在头文件里定义DECLARE_SERIALIZE宏,在cpp里定义IMPLEMENT_DERIALIES宏,重载Seralize函数。
2。打开一个内存文件,把你的共享对象序列化进去。然后用这个内存文件create一块共享内存。
3。在另外一个进程里打开共享内存,用反序列化从内存文件里恢复数据对象。
优点是:
1。不用考虑指针的问题,指针对象系统会自动创建。不过系统不会帮你删除原有的指针。
2。不用考虑对象的个数,可以充份利用MFC的模板类。
缺点是:
1。你的对象必须继承CObject,所以会加入虚函数表,使得对象的size加大。而且必须重载Seralize函数。
2. 如果你的共享数据很大,则存在内存分配和效率的问题。因为这样相当于同时存在3个共享数据的COPYTop
8 楼NowCan(城市浪人)回复于 2002-05-02 21:04:23 得分 20
现把结构WM_COPYDATA过去,然后在把指针指向的内存WM_COPYDATA过去,到了另一边再组装吧.Top




