如何知道一个进程运行了多少个实例?

      在编写程序的时候,有时我们可能需要知道一个进程运行了多少个实例。首先你可能会想到使用全局变量,但试验结果表明全局变量只在当前进程的范围内有效,一旦你为当前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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值