windows笔记-使用内存映射文件在进程之间共享数据

数据共享方法是通过让两个或多个进程映射 同一个文件映射对象 的视图来实现的,这意味着它们将共享物理存储器的同一个页面。因此,当一个进程将数据写入一个共享文件映射对象的视图时,其他进程可以立即看到它们视图中的数据变更情况。

 

注意 :如果多个进程共享单个文件映射对象,那么所有进程 必须使用相同的名字 来表示该文件映射对象。

 

//------------------------------------------------------------

// 文件名     : 17_FileMapping_SharaData.cpp

// 创建者     :  方煜宽

//  邮箱       fangyukuan@gmail.com

// 创建时间    :  2010-9-6 16:15

// 功能描述    :  使用内存映射文件在进程之间共享数据

//              请运行多个进程以观察进程之间共享数据的效果

// ------------------------------------------------------------

#include "stdafx.h"

#include "windows.h"

#include "process.h"

#include <iostream>

using namespace std ;

 

HANDLE g_hTimer = NULL ;

 

DWORD WINAPI Thead (void * pParam )

{

   HANDLE hFileMapping = (HANDLE )pParam ;

   int nIndex = 0;

   while (true )

   {

      ::WaitForSingleObject (g_hTimer , INFINITE );

 

      void * pbFile = (void *)::MapViewOfFile (hFileMapping , FILE_MAP_WRITE , 0, 0, 0);

      cout << nIndex ++ << " :" << (PBYTE )pbFile << endl ;

      ::UnmapViewOfFile (pbFile );

   }

   return 0;

}

 

int _tmain (int argc , _TCHAR * argv [])

{

   HANDLE hFileMapping = ::CreateFileMapping (INVALID_HANDLE_VALUE ,

      NULL ,

      PAGE_READWRITE ,

      0, 99,

      TEXT ("kuan_FileMap" ));

 

   void * pbFile = (void *)::MapViewOfFile (hFileMapping , FILE_MAP_WRITE , 0, 0, 0);

 

   char szTemp [999] = {0};

   cout << "input data:" ;

   cin >> szTemp ;

   memcpy (pbFile , szTemp , strlen (szTemp ));

   ::FlushViewOfFile (pbFile , 999);

 

 

   // 下面是创建一个等待定时器

   DWORD dwTheadID ;

   HANDLE hThead = ::CreateThread (NULL , 0, Thead , hFileMapping , 0, &dwTheadID );

   g_hTimer = ::CreateWaitableTimer (NULL , FALSE , NULL );

 

   LARGE_INTEGER li ;

   li .QuadPart = 0;

   ::SetWaitableTimer (g_hTimer , &li , 1000, NULL , NULL , FALSE );

 

 

   ::WaitForSingleObject (hThead , INFINITE );

   ::UnmapViewOfFile (pbFile );

 

   ::CloseHandle (hFileMapping );

 

   ::CloseHandle (hThead );

   ::CloseHandle (g_hTimer );

 

   return 0;

}



看运行效果:先运行一个进程,输入数据。再打开另一个进程,输入数据,可以看到第一个进程的输出数据也改变了。 



本文地址:http://www.cnblogs.com/fangyukuan/archive/2010/09/09/1822310.html


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值