使用DLL在多个进程间共享全局变量
来源:互联网 发布:点云数据三维重建 编辑:程序博客网 时间:2024/05/16 18:08
默认情况下,同一个程序启动多个进程,它们各自的变量值是不会相互影响的。第二个实例启动后,在修改全局变量的时候,系统会运用内存管理系统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")
...{
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”不存在。
通过这样的方法来定义全局变量,这个变量就可以在多个进程间共享了,一个进程修改了数据,其它进程的数据也被更新了。需要注意的是如果多个进程会修改数据那就需要加上一定的锁机制了。
- 使用DLL在多个进程间共享全局变量
- 使用DLL在多个进程间共享全局变量
- 使用DLL在进程间共享内存_如何在多进程中用共享DLL
- 使用DLL在进程间共享数据
- 使用DLL在进程间共享数据
- 使用DLL在进程间共享数据
- 使用DLL在进程间共享数据
- 使用DLL在进程间共享数据
- 多个进程范文DLL中的函数/全局变量/数据共享段问题
- 使用DLL在进程间共享数据(5)
- Windows中使用DLL在进程间共享数据
- dll和exe的共享节------多进程共享dll/exe全局变量
- dll和exe的共享节------多进程共享dll/exe全局变量
- dll和exe的共享节------多进程共享dll/exe全局变量
- dll和exe的共享节------多进程共享dll/exe全局变量
- 利用DLL在进程间共享数据
- DLL入门浅析(5)——使用DLL在进程间共享数据
- DLL入门浅析(5)——使用DLL在进程间共享数据
- 使用客户端脚本对UpdateProgress编程
- DataList分页
- 抓取JPG和PDF上的文字
- windows平台上向64位移植c/c++的变量类型大小变化
- 现在的大学生多好啊,不要老骂了
- 使用DLL在多个进程间共享全局变量
- VS2005 网站打包
- WinCE BSP中OAL层中的OEMIoControl介绍
- VC中调用WebService的超时设置
- How to generate a log file in VC++ or Embedded VC++ (For Pocket PC or WinCE devices)
- 更快、更强 64位编程的三十二条军规
- poi实现从数据库到excel的导出。
- 快速排序算法
- 选择排序算法