进程间通讯问题,内存共享的实现
需要在多个进程间传输数据,其中只有一个进程写数据,其他的进程读数据。
数据块大概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




