在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一.原理 通过使用“内存映射文件”,实现内存共享 二.主要操作 共享内存结构: PShareMem = ^TShareMem; TShareMem = Record id:string[10]; name:string[20]; age:Integer; end; 基本变量: shareMemName:string; //共享内存名 fileHandle : THandle;//内存映射文件句柄 pUserInfoShareMem : PShareMem;//指向共享内存的指针 a)写入程序 1)创建“内存映射文件” begin //创建“内存映射文件” fileHandle:=CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, SizeOf(TShareMem), PChar(shareMemName)); if fileHandle <> 0 then begin Self.Memo1.Lines.Add('已成功创建内存映射文件!'); end; end; 2)建立映射关系 //将“内存映射文件”与“应用程序地址空间”建立映射关系 pUserInfoShareMem:=MapViewOfFile(fileHandle,FILE_MAP_ALL_ACCESS,0,0,sizeof(TShareMem)); if pUserInfoShareMem <> nil then begin Self.Memo1.Lines.Add('已成功建立映射关系!'); end; 3)写入信息 pUserInfoShareMem.id:='8888'; pUserInfoShareMem.name:='Terry'; pUserInfoShareMem.age:=25; Self.Memo1.Lines.Add('已向共享内存中写入用户信息!'); 4)解除映射关系 //解除“内存映射文件”与“应用程序地址空间”的映射关系 if pUserInfoShareMem<> nil then UnmapViewOfFile(pUserInfoShareMem); Self.Memo1.Lines.Add('已成功解除映射关系!'); 5)关闭“内存映射文件” //关闭内存映射文件 if fileHandle<> 0 then CloseHandle(fileHandle); Self.Memo1.Lines.Add('已成功关闭内存映射文件!'); b)读取程序 1)打开“内存映射文件” fileHandle:=OpenFileMapping(FILE_MAP_ALL_ACCESS,false,pchar(shareMemName)); if self.FileHandle <> 0 then begin Self.Memo1.Lines.Add('已成功打开内存映射文件!') end; 2)建立映射关系 pUserInfoShareMem:= MapViewOfFile(self.FileHandle,windows.FILE_MAP_ALL_ACCESS,0,0,sizeof(TShareMem)); if pUserInfoShareMem <> nil then begin Self.Memo1.Lines.Add('已成功建立映射关系!'); end; 复制代码 3)读取信息 if pUserInfoShareMem <> nil then begin userInfoStr:='共享内存中获取的用户信息如下:'+#13#10; userInfoStr:=userInfoStr+'用户Id号:'+pUserInfoShareMem.id+#13#10; userInfoStr:=userInfoStr+'用户姓名:'+pUserInfoShareMem.name+#13#10; userInfoStr:=userInfoStr+'用户年龄:'+IntToStr(pUserInfoShareMem.age); Self.Memo1.Lines.Add(userInfoStr); end; 4)解除映射关系 if pUserInfoShareMem<> nil then UnmapViewOfFile(pUserInfoShareMem); Self.Memo1.Lines.Add('已成功解除映射关系!'); 5)关闭“内存映射文件” if fileHandle<> 0 then CloseHandle(fileHandle); Self.Memo1.Lines.Add('已成功关闭内存映射文件!'); PS:“写入程序”解除映射关系,关闭内存映射文件对“读取程序”的影响。 影响读取程序的读取操作 接关闭内存映射文件 防止前者已关闭内存映射文件,而后者还没读取。
三.其他 1)常驻内存参考:建立磁盘物理文件,而不是内存映射文件 http://topic.csdn.net/u/20070616/08/ec12fda5-63c7-4c60-9c30-04795d70a922.html 2) 原理详细分析:http://blog.csdn.net/khuang2008/article/details/3949720 3) 分享自http://www.cnblogs.com/edisonfeng/archive/2012/05/21/2511975.html
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论