#pragma data_seg() 的使用,进程间的通信
2016-05-03 16:54
549 查看
#pragma data_seg()
1,#pragma
data_seg()一般用于DLL中。也就是说,在DLL中定义一个共享的,有名字的数据段。最关键的是:这个数据段中的全局变量可以被多个进程共享。否则多个进程之间无法共享DLL中的全局变量。
2,共享数据必须初始化,否则微软编译器会把没有初始化的数据放到.BSS段中,从而导致多个进程之间的共享行为失败。
3,你所谓的结果正确是一种错觉。如果你在一个DLL中这么写:
#pragma data_seg("MyData")
int g_Value; // Note that the global is not initialized.
#pragma data_seg()
DLL提供两个接口函数:
int GetValue()
{
return g_Value;
}
void SetValue(int n)
{
g_Value = n;
}
然后启动两个进程A和B,A和B都调用了这个DLL,假如A调用了SetValue(5);
B接着调用int m = GetValue(); 那么m的值不一定是5,而是一个未定义的值。因为DLL中的全局数据对于每一个调用它的进程而言,是私有的,不能共享的。假如你对g_Value进行了初始化,那么g_Value就一定会被放进MyData段中。换句话说,如果A调用了SetValue(5);
B接着调用int m = GetValue(); 那么m的值就一定是5!这就实现了跨进程之间的数据通信!
相关文章推荐
- 腾讯云服务器CentOS7系统上安装JDK+Tomcat+MySQL
- Linux ln命令 - 建立文件/目录链接(只看红色部分)
- Top 20+ MySQL Best Practices
- 微信开发本地测试环境搭建
- 关于android里的文件创建及读写问题
- [解决]ganglia集群中某节点不能移除的问题
- java征途的点滴
- Swift2.0系列]Error Handling(项目应用篇)
- Bootstrap入门七:按钮
- UIButton中setTitleEdgeInsets和setImageEdgeInsets的使用
- untiy 3d ShaderLab_第6章_VertexLit渲染路径_1_顶点照明
- Android创建文件夹及文件并写入数据
- android图表——MPAndroidchart
- No.02 Xcode(7.x) 横竖屏旋转
- BRISK
- JRebel Windows RegCreateKeyEx(...) returned error code 5.
- 理解Python的With语句
- iOS开发笔记--cell最右边显示箭头,字符,自定义分割线
- 解决 MinGw编译wxWidgets出错
- Linux gdb调试器用法全面解析