分享

windows共享内存的应用

 昵称9346272 2012-03-25

一共有两个程序,分别为Server 和Client 。

Server在内存中开辟一块数据区域并写入数据,Client读取Serve在内存中开辟的数据区内的数据并显示出来

共享区域通过名称辨别

VS2010下正常编译通过

下面上源代码

Server端源代码:

#include<Windows.h>
#include<iostream>
using namespace std;
int main()
{
 HANDLE myhandle;
 /*
 *在内存划出大小4字节名为MyInfo的区域
 */
 myhandle=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,sizeof(int),L"MyInfo");
 DWORD error=GetLastError();
 if(error== ERROR_FILE_INVALID||error== ERROR_INVALID_HANDLE ||error==  ERROR_ALREADY_EXISTS  )
 {
  cout<<"Create Failed"<<endl;
 }
 else
 {
  cout<<"Create Success"<<endl;
  int x;
  int *p;
  while(cin>>x)
  { 
   /*
   * 获取内存对象,并操作写入一个int型数据
   */
   p=(int *)MapViewOfFile(myhandle,FILE_MAP_WRITE,0,0,sizeof(int));
   p[0]=x;
   cout<<"成功将数据"<<x<<"写入共享内存区"<<endl;
   UnmapViewOfFile(p); 
  }
 }
 CloseHandle( myhandle);
 system("pause");
 return 0;
}

Client端源代码:

#include<Windows.h>
#include<iostream>
using namespace std;
int main()
{
 HANDLE myhandle;
 myhandle=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READONLY,0,sizeof(int),L"MyInfo");
 DWORD error=GetLastError();
 if(error!=  ERROR_ALREADY_EXISTS  )
 {
  cout<<"Create Failed"<<endl;
 }
 else
 {
  cout<<"Create Success"<<endl;
  int x;
  int *p;
  while(cin>>x)
  {
   /*
   * 获取内存对象,并操作读取一个int型数据
   */
   p=(int *)MapViewOfFile(myhandle,FILE_MAP_READ,0,0,sizeof(int));
   cout<<"共享区域数据为:"<<p[0]<<endl;
   UnmapViewOfFile(p);
   
  }
 }
 CloseHandle( myhandle);
 system("pause");
 return 0;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多