`
king_c
  • 浏览: 223537 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

共享内存的例子(转msdn)

 
阅读更多

Creating Named Shared Memory

To share data, multiple processes can use memory-mapped files that the system paging file stores.

First Process

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#define BUF_SIZE 256
TCHAR szName[]=TEXT("Global\\MyFileMappingObject");
TCHAR szMsg[]=TEXT("Message from first process");
int main()
{
   HANDLE hMapFile;
   LPCTSTR pBuf;
   hMapFile = CreateFileMapping(
                 INVALID_HANDLE_VALUE,    // use paging file
                 NULL,                    // default security 
                 PAGE_READWRITE,          // read/write access
                 0,                       // max. object size 
                 BUF_SIZE,                // buffer size  
                 szName);                 // name of mapping object
 
   if (hMapFile == NULL) 
   { 
      printf("Could not create file mapping object (%d).\n", 
             GetLastError());
      return 1;
   }
   pBuf = (LPTSTR) MapViewOfFile(hMapFile,   // handle to map object
                        FILE_MAP_ALL_ACCESS, // read/write permission
                        0,                   
                        0,                   
                        BUF_SIZE);           
 
   if (pBuf == NULL) 
   { 
      printf("Could not map view of file (%d).\n", 
             GetLastError()); 
      return 2;
   }
   
   CopyMemory((PVOID)pBuf, szMsg, strlen(szMsg));
   _getch();
   UnmapViewOfFile(pBuf);
   CloseHandle(hMapFile);
   return 0;
}
 

Second Process

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#define BUF_SIZE 256
TCHAR szName[]=TEXT("Global\\MyFileMappingObject");
int main()
{
   HANDLE hMapFile;
   LPCTSTR pBuf;
   hMapFile = OpenFileMapping(
                   FILE_MAP_ALL_ACCESS,   // read/write access
                   FALSE,                 // do not inherit the name
                   szName);               // name of mapping object 
 
   if (hMapFile == NULL) 
   { 
      printf("Could not open file mapping object (%d).\n", 
             GetLastError());
      return 1;
   } 
 
   pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object
               FILE_MAP_ALL_ACCESS,  // read/write permission
               0,                    
               0,                    
               BUF_SIZE);                   
 
   if (pBuf == NULL) 
   { 
      printf("Could not map view of file (%d).\n", 
             GetLastError()); 
      return 2;
   }
   MessageBox(NULL, pBuf, TEXT("Process2"), MB_OK);
   UnmapViewOfFile(pBuf);
   CloseHandle(hMapFile);
 
   return 0;
}
 

这个例子的意思是,进程1开一个叫"Global\\MyFileMappingObject"的共享内存,然后把一片数据"Message from first process"拷到共享内存里面,然后等待用户的_getch()。这时,进程2开始运行,它以相同的名字"Global\\MyFileMappingObject"打开共享内存,把进程1放在里面的数据"Message from first process"读出来,然后退出。接着用户实施_getch(),进程1也退出,共享内存被撤销。

分享到:
评论

相关推荐

    MSDN98中的例子walker又名pwalk

    《MSDN98中的"walker"(又名"pwalk"):深入解析进程内存管理》 在IT领域,理解并掌握进程内存管理是至关重要的技能之一。MSDN98中的一个经典示例"walker"(又称"pwalk"),为我们提供了一个深入了解进程内存使用...

    msdn资源共享

    【标题】"msdn资源共享"指的是一个专门用于获取MSDN资源的软件,它是由易语言编写的,并且已经通过了360安全检测,确保了软件的安全性。 【描述】MSDN(Microsoft Developer Network)是微软为开发者提供的一系列...

    MSDN的CSocket例子chatter

    【标题】"MSDN的CSocket例子chatter"是一个基于微软MSDN提供的示例,用于演示如何使用MFC(Microsoft Foundation Classes)中的`CSocket`类进行网络通信。`CSocket`是MFC对Windows Sockets(Winsock)API的一个封装...

    MSDN上的workflow第一个例子SimpleExpenseReport

    **工作流基础与MSDN教程概述**...通过这个例子,开发者可以了解如何创建、管理和调试工作流,同时掌握如何将业务逻辑融入其中。无论你是初学者还是经验丰富的开发人员,这个教程都能帮助你更好地理解和应用工作流技术。

    MSDN中文版下载

    这包括了C++语言标准的解释、STL(Standard Template Library)的使用、异常处理、内存管理、多线程编程等内容。对于MFC部分,MSDN会详细解释各个类的功能、成员函数的用法以及如何在实际项目中应用。 在实际开发...

    MSDN中所有MFC例子源代码

    在“MSDN中所有MFC例子源代码”这个压缩包中,包含了MSDN官方提供的大量MFC(Microsoft Foundation Classes)的示例源代码。MFC是一个C++类库,它封装了Windows API,使得开发者可以使用面向对象的方式来编写Windows...

    VC++ 6.0 msdn中文版

    3. **调试器**: 强大的调试工具,可以设置断点、查看内存、单步执行代码,帮助开发者定位和修复问题。 4. **资源编辑器**: 可以方便地创建和修改应用程序的资源,如图标、菜单、对话框等。 5. **MFC支持**: 提供对...

    MSDN2005绿色便携版MSDN

    首先声明,这份资源是amo_xoo的毛哥.NET 2.0便携参考(绿色MSDN) 2.0 彻底版,但他那个分了9个包,下载起来很不方便,所以就引用过来,方便大家下载。 微软MSDN在线库虽然全,但有时不方便上网,而MSDN Library安装...

    MSDN 帮助文档(CHM)

    1. **C++编程基础**:对于C++初学者来说,MSDN提供了详尽的C++语言参考,包括语法、类库、标准模板库(STL)、异常处理、内存管理等方面的内容。通过CHM文件,学习者可以查找和理解各种函数、类和关键字的用法。 2....

    VS2005_MSDN例子

    【标题】"VS2005_MSDN例子"揭示了这个压缩包文件包含的是关于Visual Studio 2005的MSDN示例代码。Visual Studio 2005是微软发布的一款强大的集成开发环境(IDE),用于创建各种类型的软件应用程序,包括Windows桌面...

    MSDN.rar_msdn_windows

    MSDN,全称为Microsoft Developer Network,是微软公司提供的一套全面的开发资源库,它包含了Windows操作系统、.NET Framework、Office、SQL Server等微软产品和技术的详细文档、API参考、示例代码以及开发工具等...

    [MSDN].msdn_oct_2001

    [MSDN].msdn_oct_2001 适用于vc++6.0,最后一个版本。分成7个文件上传

    MSDN6.0.rar

    例如,使用DebugView工具进行日志记录和调试,利用Visual C++的性能分析器进行代码性能剖析,以及如何有效地管理和释放内存以避免内存泄漏等问题。此外,对于多线程编程,MSDN6.0提供了关于线程同步、互斥量、临界区...

    MSDN-library-vchelp.rar_MSDN library chm_MSDN-library_msdn_msdn

    vc++6.0 MSDN Library chm

    MSDN 下载器 1.4

    【MSDN 下载器 1.4】是一个专门设计用于帮助用户下载MSDN资源到Word文档的工具。这款软件的主要功能是将MSDN的技术文档、API参考和其他技术资料转换成易于阅读和保存的Word格式,方便离线查阅或打印。通过这个工具,...

    MSDN的CSocket例子chatsrvr

    【标题】MSDN的CSocket例子 - chatsrvr 在微软开发者网络(MSDN)上,有一个关于使用MFC(Microsoft Foundation Classes)中的`CSocket`类实现简单聊天服务器的例子,名为`chatsrvr`。这个例子展示了如何在Windows...

    MSDN资源下载工具

    "Share MSDN"这个文件可能是一个共享的MSDN资源集合,可能包含了各种版本的操作系统、开发工具和其他软件的安装包。使用这类共享资源时,需谨慎对待版权问题,确保你有权使用这些资源,并且遵循社区分享的相关规则。...

    share msdn2.3.3.

    Share MSDN 2.3.3作为一款工具,可能通过某种机制,如网络共享或镜像,帮助用户绕过通常需要订阅才能访问的限制,提供了方便快捷的下载途径。 此工具的更新至2.3.3版本,表明开发者社区对此有着持续的需求,并且...

    windows API msdn 开发手册

    内存管理函数,如`VirtualAlloc`分配虚拟内存,`VirtualFree`释放内存。 网络通信方面,Windows API提供了诸如`socket`、`bind`、`listen`、`accept`、`send`和`recv`等函数,支持TCP/IP协议栈的编程。安全性方面,...

    MSDN Library

    MSDN Library是微软公司提供的一款极其重要的开发人员资源库,它包含了微软所有可开发产品的技术文档、编程指南、API参考、示例代码以及科技文献。这个综合性的平台为开发者提供了全面的技术支持,无论你是初学者...

Global site tag (gtag.js) - Google Analytics