使用内存共享机制进程间通讯

前一篇中简单介绍了进程间通讯的机制之一-------消息机制。本篇中我简要的描述一下进程间通讯的另一种机制----------内存共享机制。

WINDOWS中要使用内存共享的方式在进程间通讯需要采用DLL方式。由于WIN32把DLL装入全局内存并把DLL映射到每个程序的地址空间。所有载入DLL的应用程序只能共享程序代码,不能共享数据。要想使DLL的数据区能设计成共享的存储区,可以通过#pragma data_seg指令来建立一个新段来做完成。但是这样还不能够做到数据共享,还要把段中将要共享的变量告诉连接器。以下对这个过程进行介绍:

1,新建一个空的DLL工程,向里边添加相应的文件;

2,在.def文件中添加以下代码

SECTIONS

        MyShared READ WRITE SHARED

3,在CPP文件中添加以下代码,记住共享数据变量的初始化很重要

#pragma data_seg("MyShared")
char No[256]=TEXT("");     //共享数据变量

volatile bool bInCriticalSection=false;   //数据同步标志
#pragma data_seg()
#pragma comment(linker,"/SECTION:MyShared,RWS")

CCriticalSection cs;       //同步标志

4,在CPP文件中添加对共享数据区的读写函数:

//读取数据

WINAPI  LPSTR GetNo()

{

     while(bInCriticalSection)

    {

       Sleep(1);

    }

    return No;

}

//写数据

WINAPI void SetNo(LPCSTR lpStr)

{

     while(bInCriticalSection)

    {

       Sleep(1);

    }

    cs.Lock(); 
   bInCriticalSection=true;
   strcpy(No,lpStr);
   bInCriticalSection=false;
   cs.Unlock();

}

5,新建两个应用程序,将DLL头文件和LIB文件包含到程序中:

#include"DllTest.h"

#pragma comment(lib,"DllTest.lib")

就可以使用以上两个函数(GetNo,SetNo)进行进程间通讯了。具体的我就不多说了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值