频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

Windows 95的内存共享

来源:逸仙时空 作者:- 出处:巧巧读书 2005-11-28 进入讨论组

  下面给出一个共享内存的例子。在我们开发的中心监控显示软件中,工作站上的监视软件由几个独立进程组成,各自监视相应的子系统;由各监视进程共享的网络通讯模块负责网上监视信息的接收,并经由子线程写入对应监视进程的数据区。

信息接收模块和监视进程共享内存数据区,由互斥控制对象保证内存读写访问的同步。

  信息接收模块的程序如下:

  CMutex mMutex1(TRUE, "Info1_Mutex"); //互斥对象

  CSingleLock mSLock1 ( & mMutex1 );

  DWORD dSize1; //信息区大小

  HANDLE hMem1; //文件映像对象

  InfoStruct1 pInfo1; //信息数据结构

  hMem1 = CreateFileMapping(

  (HANDLE(-1), 0, PAGE_READWRITE, 0,ShSize, "System1_Info");

  ( hMem1 == 0 ) //创建文件映像对象失败

  essageBox(hwnd, "Cannot Create FileMap for SubSystem1 ","Error", MB_OK);

  turn false;

  if (GetLastError() == ERROR_ALREADY_EXIST) //对象已经存在

  essageBox(hwnd, "FileMap Already Exists", "Error", MB_OK);

  turn false;

  pInfo1 = (InfoStruct1 *) MapViewOfFile( hMem1, FILE_MAP_WRITE, 0,0,0);

  if ( pInfo1 == 0)

  { MessageBox(hwnd, "Cannot Create View of File Mapping", "Error", MB_OK);

  seHandle( hMem1);

  urn false;

  }

  子线程的工作:

  mSLock1.Lock();

  write information to pInfo1…

  mSLock1.Unlock();

  监视进程的程序结构同接收模块类似,如下所示:

  ………

  (GetLastError()!= ERROR_ALREADY_EXIST) //对象不存在

  essageBox(hwnd, "FileMap doesnot Exists", "Error", MB_OK);

  turn false;

  ………

  mSLock1.Lock();

  read information from pInfo1…

  mSLock1.Unlock();

  七、结论

  随着硬件速度的发展和软件规模的扩大,多任务操作系统下进程之间的通讯量也在增加,进程之间通讯的手段多种多样,其中内存共享方法的效率高,使用方便,愿本文的介绍对你有所裨益,希望能为你的学习和工作节省一点宝贵的时间。

收藏 http://www.qqread.com/vc/j622101200.html 更多文章 更多内容请看共享上网专题三机互联与共享专题局域网共享专题专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章