使用DLL在多个进程间共享全局变量

     默认情况下,同一个程序启动多个进程,它们各自的变量值是不会相互影响的。第二个实例启动后,在修改全局变量的时候,系统会运用内存管理系统copy- on-write的特性来防止修改了第一个实例的数据,即系统会再分配一些内存,并将全局变量复制到这块内存中,每个实例使用自己的内存空间上的数据而互不影响。

有时候我们想在多个进程间共享数据,windows提供了这种方法,就是创建自己的共享数据节,并将需要共享的变量放入该内存中。如果是在相同程序的多个实例间共享数据,只要在exe文件创建共享节即可,否则就需要在DLL中创建共享节,其它进程加载该DLL来共享数据。方法如下:

struct  tThrState
{
tThrState() : nTimeout(
0),nState(0),UpdTime(0)
{
}

int nTimeout;
volatile LONG nState;
volatile time_t UpdTime;
}
;

#pragma  data_seg(".Shared")
tThrState g_ThrState[
65536 =   {tThrState()} ;
#pragma  data_seg()

#pragma  comment(linker, "/Section:.Shared,RWS")

 

g_ThrState是需要共享的数据,注意定义变量的时候需要进行初始化,否则变量不会放入这个自定义的数据节中,而会被放到未初始化的数据节中,这样就不能共享数据了。如果没有初始化,链接程序的时候会提示:LINK : warning LNK4039: 用 /SECTION 选项指定的节“.Shared”不存在。

通过这样的方法来定义全局变量,这个变量就可以在多个进程间共享了,一个进程修改了数据,其它进程的数据也被更新了。需要注意的是如果多个进程会修改数据那就需要加上一定的锁机制了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值