在编写程序的时候,有时我们可能需要知道一个进程运行了多少个实例。首先你可能会想到使用全局变量,但试验结果表明全局变量只在当前进程的范围内有效,一旦你为当前EXE起了另外一个新的进程,为了保证一个进程对全局变量的修改不至于对其他实例造成影响,系统对这些变量采用多份COPY的办法(虽然在启动一个EXE的多个实例进程时系统尽量采用共享内存代码的办法),所以你修改全局变量的值进在当前实例有效。
实际上编译器或者MICROSOFT为你提供了一个可行的办法,对某些CODE进行各个实例之间共享。
VC编译器最终为你生成的EXE或DLL是分为许多节的(具体参见《WINDOWS核心编程》),其中就有一个叫共享节的,在本节中定义的变量在系统级别是共享的,也就是说多个实例可以共享改变量。VC编译器有个/SECTION开关,具体如下:
/SECTION:name,attributes
其中name使用Shared就可以了,attributes用来设置对此节的操作属性。不过可以在程序中直接使用下面的语句来达到同样的效果:
#pragma comment(liner,"/SECTION:Shared,RWS")
代码实例:
#pragma data_seg("Shared")volatile int g_iAppInstance = 0;
#pragma data_seg()
#pragma comment(linker,"/Section:Shared,RWS")
将上面的代码放到你的main函数之前,在main函数对g_iAppInstance加1,结束的时候减1。