Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16496687
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:52:10

下载本文示例代码
  下面给出一个共享内存的例子。在我们开发的中心监控显示软件中,工作站上的监视软件由几个独立进程组成,各自监视相应的子系统;由各监视进程共享的网络通讯模块负责网上监视信息的接收,并经由子线程写入对应监视进程的数据区。信息接收模块和监视进程共享内存数据区,由互斥控制对象保证内存读写访问的同步。   信息接收模块的程序如下:   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();   七、结论   随着硬件速度的发展和软件规模的扩大,多任务操作系统下进程之间的通讯量也在增加,进程之间通讯的手段多种多样,其中内存共享方法的效率高,使用方便,愿本文的介绍对你有所裨益,希望能为你的学习和工作节省一点宝贵的时间。   下面给出一个共享内存的例子。在我们开发的中心监控显示软件中,工作站上的监视软件由几个独立进程组成,各自监视相应的子系统;由各监视进程共享的网络通讯模块负责网上监视信息的接收,并经由子线程写入对应监视进程的数据区。信息接收模块和监视进程共享内存数据区,由互斥控制对象保证内存读写访问的同步。   信息接收模块的程序如下:   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();   七、结论   随着硬件速度的发展和软件规模的扩大,多任务操作系统下进程之间的通讯量也在增加,进程之间通讯的手段多种多样,其中内存共享方法的效率高,使用方便,愿本文的介绍对你有所裨益,希望能为你的学习和工作节省一点宝贵的时间。 下载本文示例代码


Windows 95的内存共享Windows 95的内存共享Windows 95的内存共享Windows 95的内存共享Windows 95的内存共享Windows 95的内存共享Windows 95的内存共享Windows 95的内存共享Windows 95的内存共享Windows 95的内存共享Windows 95的内存共享Windows 95的内存共享Windows 95的内存共享Windows 95的内存共享Windows 95的内存共享
阅读(129) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~