共享内存

gyj_china 2007-03-01 02:46:03
有谁有没有关于一个内存共享的例子参考一下!谢谢CreateFileMapping/MapViewOfFile/OpenFileMapping
...全文
394 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
i_love_pc 2007-05-17
  • 打赏
  • 举报
回复
Mark
cczlp 2007-05-17
  • 打赏
  • 举报
回复
//--季老大的代码--------------------------------------------------------------------
class TSharedMem
{
private:
bool FCreated;
BYTE *FFileView;
HANDLE FHandle;
public:
TSharedMem(const char* Name, int Size);
~TSharedMem();

__property BYTE* Buffer = {read=FFileView};
__property bool Created = {read=FCreated};
};
TSharedMem::TSharedMem(const char* Name, int Size)
{
FHandle = CreateFileMapping((HANDLE)0xFFFFFFFF,
NULL, PAGE_READWRITE, 0, Size, Name);
if (FHandle != NULL)
{
FCreated = GetLastError() == 0;
FFileView = (BYTE*)MapViewOfFile(FHandle,
FILE_MAP_WRITE, 0, 0, Size);
if (FFileView && FCreated)
{
ZeroMemory(FFileView, Size);
}
}
else
{
FFileView = NULL;
}
}
TSharedMem::~TSharedMem()
{
if (FFileView)
{
UnmapViewOfFile(FFileView);
}
if (FHandle)
{
CloseHandle(FHandle);
}
}
wanglovec 2007-05-17
  • 打赏
  • 举报
回复
up
Waiting4you 2007-03-01
  • 打赏
  • 举报
回复
MSDN里有例子的,这里放一个我的,TForm1上放一个Label1,Timer1,事件代码对照下面写.编译完成后同时运行N个实例,点击其中一个窗体,所有的窗体上的Label上的字符都会跟着变(内存共享了)


HANDLE hMapFile=NULL;
LPVOID pMapFile=NULL;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
hMapFile = CreateFileMapping((HANDLE)(0xFFFFFFFF),
NULL,
PAGE_READWRITE,
0,
100,
"Hello_Mapping");
if(hMapFile!=NULL )
pMapFile = MapViewOfFile(hMapFile,
FILE_MAP_ALL_ACCESS,
0,
0,
0);
if(pMapFile==NULL)Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
UnmapViewOfFile(pMapFile);
CloseHandle(hMapFile);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
char *p=(char*)pMapFile;
if(p!=NULL&&p[0]!='\0')
{
Label1->Caption=p;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClick(TObject *Sender)
{
char *p=(char*)pMapFile;
strcpy(p,"Hello1");
p[5]='0'+GetTickCount()%10;
}
//---------------------------------------------------------------------------

daydayup234 2007-03-01
  • 打赏
  • 举报
回复
http://www.soudie.net/top_22314_cat_1/

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧