#pragma data_seg介绍
来源:互联网 发布:软件著作权简历 编辑:程序博客网 时间:2024/04/29 04:54
用#pragma data_seg建立一个新的数据段并定义共享数据,其具体格式为:
#pragma data_seg ("shareddata")
HWND sharedwnd=NULL;//共享数据
#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!这就实现了跨进程之间的数据通信!
----------------------------------------------------------------------------------------------------
有的时候我们可能想让一个应用程序只启动一次,就像单件模式(singleton)一样,实现的方法可能有多种,这里说说用#pragma data_seg来实现的方法,很是简洁便利。
应用程序的入口文件前面加上
#pragma data_seg("flag_data")
int app_count = 0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:flag_data,RWS")
然后程序启动的地方加上
if(app_count>0) // 如果计数大于0,则退出应用程序。
{
//MessageBox(NULL, "已经启动一个应用程序", "Warning", MB_OK);
//printf("no%d application", app_count);
return FALSE;
}
app_count++;
- #pragma data_seg介绍
- #pragma data_seg介绍
- #pragma data_seg介绍
- #pragma data_seg介绍
- #pragma data_seg介绍
- #pragma data_seg介绍
- #pragma data_seg()的使用介绍
- #pragma data_seg()
- #pragma data_seg
- #pragma data_seg
- #pragma data_seg
- #pragma data_seg
- #pragma data_seg
- #pragma data_seg()
- #pragma data_seg
- #pragma data_seg()
- #pragma data_seg
- #pragma data_seg()
- [数据结构]链表创建、打印、反转
- FreeRadius 1.1.7 + Postgresql 8.1.5 (FreeBSD 6.1系统)
- T-sql 学习(2) - join与group by
- OracleJOB的建立,定时执行任务
- PHPBB3的用户密码
- #pragma data_seg介绍
- Android大赛首轮获奖作品解析
- 超级入门:JAVA从零开始到HelloWorld
- 运行新进程
- was安装的小tip
- 关于Designer_v6.0.0_for_Eclipse3.2破解
- WinCE应用程序检测SD卡的插拔
- linux头文件说明
- ssh整合——运行tomcat报错:严重: action: null...Error creating bean with name 'sessionFactory' .....org.apache.commons.collections.Sequence